请教前辈关于线程同步的问题,望解答,谢谢

「已注销」 2016-10-10 05:56:42






第一个线程只是因为我单纯地创造了两个线程他们各自运行,而没有共享amout这个量,
那第二为什么就共享了呢?
第二个和第一个的差别在哪里呢?我有点不明白
...全文
143 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
肃穆丶 2016-10-13
  • 打赏
  • 举报
回复
引用 2 楼 it_junior 的回复:
[quote=引用 1 楼 wangyin970774934 的回复:] 二个线程共享P这一个对象,一个线程在run的时候,你用了synchronized(this) 锁住了这个对象,另一个线程就要等待这个对象被释放,所有不会出现问题。 小白见解。
/*------------------------------------------------------------------------------------------------------------*/ 这种概念我当然明白,问题是第一个为什么没锁住,而第二个锁住了,麻烦看清楚问题, 谢谢[/quote] 。。。因为你第一个没锁住同一个对象啊,只是创建了两个线程,他们都有amount变量
「已注销」 2016-10-11
  • 打赏
  • 举报
回复
引用 7 楼 a1411473204 的回复:
你创建Thread两个对象时都以prize的对象来创建,所以最后实质t1和t2指向的是同一个对象,所以只有一把锁,所以两个线程启动后要A线程执行完了后B才能进同步语句块
明白了,谢谢
「已注销」 2016-10-11
  • 打赏
  • 举报
回复
引用 6 楼 tomorrow_C 的回复:
[size=16px]首先,你采用的是同步代码块的方式来保证线程同步,他的锁可以是任意对象(匿名对象除外)。 第一种之所以达不到效果,是因为prize类里面的amout不是静态的,每个线程都是在用自己的amout 第二种方式OK,是因为你在启动线程之前创建了一个prize对象,并且让两个线程公用这个对象,所以每个线程用的是同一个amout [/size] 希望对你有所帮助
受用了
a1411473204 2016-10-11
  • 打赏
  • 举报
回复
你创建Thread两个对象时都以prize的对象来创建,所以最后实质t1和t2指向的是同一个对象,所以只有一把锁,所以两个线程启动后要A线程执行完了后B才能进同步语句块
tomorrow_C 2016-10-10
  • 打赏
  • 举报
回复
[size=16px]首先,你采用的是同步代码块的方式来保证线程同步,他的锁可以是任意对象(匿名对象除外)。 第一种之所以达不到效果,是因为prize类里面的amout不是静态的,每个线程都是在用自己的amout 第二种方式OK,是因为你在启动线程之前创建了一个prize对象,并且让两个线程公用这个对象,所以每个线程用的是同一个amout [/size] 希望对你有所帮助
a1411473204 2016-10-10
  • 打赏
  • 举报
回复
写一个子类继承Thread类,是为了重写里面的run()方法,也就是线程启动后真正执行的内容。 如果你直接Thread thread = new Thread();创建对象,语法上没有错的,但是run()方法是系统默认的,也不是你自己想定义的线程中的方法,那这个线程有什么意义呢?
a1411473204 2016-10-10
  • 打赏
  • 举报
回复
你第二个代码创建线程直接通过Thread进行创建对象,那么这个对象调用的run的方法便是它Thread本身的run的方法,而不会调用你自己写的run的代码,而你第一段代码是通过Thread的子类进行创建实例对象的,调用的
SanHydra 2016-10-10
  • 打赏
  • 举报
回复
main线程也需要时间吧?拿两个start的时间差距有点大了
「已注销」 2016-10-10
  • 打赏
  • 举报
回复
引用 1 楼 wangyin970774934 的回复:
二个线程共享P这一个对象,一个线程在run的时候,你用了synchronized(this) 锁住了这个对象,另一个线程就要等待这个对象被释放,所有不会出现问题。 小白见解。
/*------------------------------------------------------------------------------------------------------------*/ 这种概念我当然明白,问题是第一个为什么没锁住,而第二个锁住了,麻烦看清楚问题, 谢谢
肃穆丶 2016-10-10
  • 打赏
  • 举报
回复
二个线程共享P这一个对象,一个线程在run的时候,你用了synchronized(this) 锁住了这个对象,另一个线程就要等待这个对象被释放,所有不会出现问题。 小白见解。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧