//使用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区别详解相关推荐

  1. Java Thread的interrupt方法详解

    Java Thread的interrupt方法详解 一.概述 interrupt方法的目的是给线程发出中断信号,但是不保证线程真的会中断 中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应 ...

  2. python协程详解_对Python协程之异步同步的区别详解

    一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...

  3. java之yield(),sleep(),wait()区别详解-备忘笔记

    java之yield(),sleep(),wait()区别详解-备忘笔记 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如 ...

  4. HashTable和HashMap的区别详解

    HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...

  5. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  6. 关于numpy中eye和identity的区别详解

    https://www.jb51.net/article/175386.htm np.identity(n, dtype=None) np.eye(N, M=None, k=0, dtype=< ...

  7. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...

  8. Jar/War/Ear等包的作用与区别详解

    Jar/War/Ear等包的作用与区别详解 以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.ja ...

  9. Java中print、printf、println的区别 详解

    Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...

最新文章

  1. QEMU-KVM自己主动创建虚拟机,以指定IP构造
  2. 哈佛牙学院博士后:教你口腔保健基本功之刷牙篇
  3. 如何在Oracle11中配置st_shapelib
  4. 简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...
  5. U8远程接入客户端重新安装问题
  6. Python入门到精通三天速成第二讲——类与继承
  7. Ceph FINDING AN OBJECT LOCATION
  8. hanlp安装和使用
  9. php中array怎么用,php中array()函数如何使用
  10. 18.链表管理内存实现c语言自动释放内存
  11. 匿名访问ftp服务器
  12. 黑苹果E430c, 安装过程
  13. html怎么画虚线空心圆,PS如何画虚线圆圈 photoshop快速画虚线圆圈方法教程
  14. excel表格怎么换行?3个方法,你一定不知道第3个
  15. 关于WannaCry
  16. H5移动应用的发布优化(四)图片优化
  17. Typescript 类型推断
  18. 初识pytest框架及其应用原理
  19. xp系统sc服务器,SC怎么封装xp系统
  20. Cryptology Asset Group p.l.c.决定增加现金资本和出售库存股份

热门文章

  1. 关于网管软件中的预警功能的发展
  2. mysql 多列索引的生效规则
  3. DellEMC品牌正式启用50%是上一代的R730对比R74
  4. Azure Redis 系列之 Azure Redis部署
  5. 2.域控制器及证书颁发机构
  6. Win32程序开发流程--《深入浅出MFC》
  7. Linux环境下如何编译和执行c程序
  8. 解决用navicate远程连接数据库出现1045 access denied for user 'root'@'localhost' using password yes...
  9. 代码规范之华为公司代码规范
  10. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)