Thread 与Runnable区别详解
//使用Thread实现线程不能实现资源共享
class MyThread extends Thread
{
private int ticket=5;
private String name;
public MyThread(String name ){
this.name=name;
}
public void run(){
for(int i=0;i<10;i++){
if(ticket>5){
System.out.println("线程"+name+"卖票"+i);
}
}
}
}
public class ThreadDemo02
{
public static void main(String args[]){
MyThread A = new MyThread("A"); //实例化两个要执行的任务。下面创建了领个线程分别一个执行任务
MyThread B = new MyThread("B");
A.start();
B.start();
}
}
//使用Runnable实现线程可以实现资源共享
class MyThread implements Runnable
{
private int ticket=5;
private String name;
public MyThread(String name){
this.name=name;
}
public void run(){
for(int i=1;i<=10;i++){
if(ticket>0){
System.out.println("线程"+name+"卖票"+(ticket--));
}
}
}
}
public class RunnableDemo02
{
public static void main(String args[]){
MyThread A = new MyThread("A"); //实例化线程要执行的任务
Thread Ta = new Thread(A); //实例两个线程对象,实际传递的是一个任务
Thread Tb = new Thread(A); //因为两个线程执行的是一个任务,所以资源是共享的
Ta.start();
Tb.start();
}
}
因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。
一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。
两种不同的线程实现方式本身就决定了其是否能进行资源共享。
转载自: http://blog.csdn.net/xiaoya629/article/details/5507252
Thread 与Runnable区别详解相关推荐
- Java Thread的interrupt方法详解
Java Thread的interrupt方法详解 一.概述 interrupt方法的目的是给线程发出中断信号,但是不保证线程真的会中断 中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应 ...
- python协程详解_对Python协程之异步同步的区别详解
一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...
- java之yield(),sleep(),wait()区别详解-备忘笔记
java之yield(),sleep(),wait()区别详解-备忘笔记 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如 ...
- HashTable和HashMap的区别详解
HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- 关于numpy中eye和identity的区别详解
https://www.jb51.net/article/175386.htm np.identity(n, dtype=None) np.eye(N, M=None, k=0, dtype=< ...
- php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解
1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...
- Jar/War/Ear等包的作用与区别详解
Jar/War/Ear等包的作用与区别详解 以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.ja ...
- Java中print、printf、println的区别 详解
Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...
最新文章
- QEMU-KVM自己主动创建虚拟机,以指定IP构造
- 哈佛牙学院博士后:教你口腔保健基本功之刷牙篇
- 如何在Oracle11中配置st_shapelib
- 简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...
- U8远程接入客户端重新安装问题
- Python入门到精通三天速成第二讲——类与继承
- Ceph FINDING AN OBJECT LOCATION
- hanlp安装和使用
- php中array怎么用,php中array()函数如何使用
- 18.链表管理内存实现c语言自动释放内存
- 匿名访问ftp服务器
- 黑苹果E430c, 安装过程
- html怎么画虚线空心圆,PS如何画虚线圆圈 photoshop快速画虚线圆圈方法教程
- excel表格怎么换行?3个方法,你一定不知道第3个
- 关于WannaCry
- H5移动应用的发布优化(四)图片优化
- Typescript 类型推断
- 初识pytest框架及其应用原理
- xp系统sc服务器,SC怎么封装xp系统
- Cryptology Asset Group p.l.c.决定增加现金资本和出售库存股份
热门文章
- 关于网管软件中的预警功能的发展
- mysql 多列索引的生效规则
- DellEMC品牌正式启用50%是上一代的R730对比R74
- Azure Redis 系列之 Azure Redis部署
- 2.域控制器及证书颁发机构
- Win32程序开发流程--《深入浅出MFC》
- Linux环境下如何编译和执行c程序
- 解决用navicate远程连接数据库出现1045 access denied for user 'root'@'localhost' using password yes...
- 代码规范之华为公司代码规范
- 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)