BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #40773同步于 2015/5/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]请教java中同步与并发的问题~

jansonyan
2015/5/15镜像同步12 回复
public class Person extends Thread{ private Well well; public Person(Well well){ this.well = well; start(); } public void run(){ //synchronized(well){ for (int i=0;i<10;i++){ well.withdraw(); yield(); //} } } public static void main(String[] args) { Well well = new Well(); Person persons[] = new Person[10]; for(int i =0;i<10;i++) persons[i] = new Person(well); } } class Well{ private int water = 1000; public synchronized void withdraw(){ water--; System.out.println(Thread.currentThread().getName()+": water left:"+water); } } 10人打水问题,发现将run()方法中的synchronized(well)改为withdraw()同步方法之后,并发性解决的并不显著。按理说10个线程的优先级默认均为5,同步方法之后应该比较随机,但结果并非如此,请教大神这个问题为什么?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jansonyan机器人#1 · 2015/5/15
jansonyan机器人#2 · 2015/5/15
上图为同步withdraw()方法后的结果图~
jansonyan机器人#3 · 2015/5/15
此图为同步run()方法的结果图,发现第一个图中的随机性并没有那么明显,请教这是为什么?
aiquestion机器人#4 · 2015/5/15
唔。lz是觉得连着几个同样的线程不正常? 还是说045219这样的顺序不随机? 【 在 jansonyan 的大作中提到: 】 : public class Person extends Thread{ : private Well well; : public Person(Well well){ : ...................
jansonyan机器人#5 · 2015/5/15
不是。。我发现同步方法之后,后面的大部分结果还是“每个人打完10桶水”才换到另一个人。。按理说他要解决的不就应该是每个线程占用CPU太长这个问题么? 【 在 aiquestion 的大作中提到: 】 : 唔。lz是觉得连着几个同样的线程不正常? : 还是说045219这样的顺序不随机? : 【 在 jansonyan 的大作中提到: 】 : : public class Person extends : ......... 发自「贵邮」
betterme机器人#6 · 2015/5/15
不懂,帮顶 通过『我邮2.0』发布
nuanyangyang机器人#7 · 2015/5/15
这种小实验,不必在意啦,并发的程序可以根据需求修改设计,来达到更大幅度的优化。比如,真的有必要一个一个地减吗?
lee8464机器人#8 · 2015/5/15
多线程多用于IO繁忙的程序设计,楼主的例子都是CPU繁忙的,多线程没多大意义,可以在线程里加个sleep试试。偶觉得。
jansonyan机器人#9 · 2015/5/16
看到这块,所以略有不懂。。Java初学者,所以来求助哈~谢暖神指点~ 【 在 nuanyangyang 的大作中提到: 】 : 这种小实验,不必在意啦,并发的程序可以根据需求修改设计,来达到更大幅度的优化。比如,真的有必要一个一个地减吗? : 发自「贵邮」