为了账号安全,请及时绑定邮箱和手机立即绑定

多线程中能量守恒那个例子,思想是按照视频的,代码自己重编的,但是每次运行一段就不出数据了,是怎么回事

多线程中能量守恒那个例子,思想是按照视频的,代码自己重编的,但是每次运行一段就不出数据了,是怎么回事

小不点2016 2016-07-29 21:50:25
package project_thread; public class EnergyThread extends Thread { private final double[] energy_box; private double energy_max; private Object lock=new Object();      @Override     public void run() {      // TODO Auto-generated method stub            while (true) { int from=(int) (Math.random()*getlength()); int to =(int) (Math.random()*getlength()); double energy=Math.random()*energy_max; int time=(int) (Math.random()*50); energy_tansform(from, to, energy); try { sleep(time); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }     }      public EnergyThread(double energy_initial,int  n) { // TODO Auto-generated constructor stub       this.energy_box=new double[n];       this.energy_max=energy_initial;       for (int i = 0; i < n; i++) { energy_box[i]=energy_initial; } }            public int getenergy_total() {       double total=0;       for (double d : energy_box) { total+=d; } return (int)total; }            public void energy_tansform(int from,int to ,double energy) { synchronized (lock) { if(energy_box[from]<energy){ try { lock.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } energy_box[from]-=energy; energy_box[to]+=energy; System.out.println(getName()+":energy_box["+from+"]向energy_box["+to+"]转移"+energy+"energy_total="+getenergy_total()); lock.notifyAll(); } }            public int  getlength() { return energy_box.length; } }//这是另一个测试 package project_thread; public class ThreadTest { public static void main(String[] args) { // TODO Auto-generated method stub                   for(int i=0;i<100;i++){           Thread thread=new EnergyThread(1000,100);           thread.start();          }          } }这是为什么呢,求大神解答
查看完整描述

1 回答

已采纳
?
Lookiy

TA贡献4条经验 获得超3个赞


 第十行代码: private Object lock=new Object(); 将此段代码改为 private static  Object lock=new Object();

 synchronized(lock) 要保证lock是同一个对象

查看完整回答
1 反对 回复 2016-08-02
  • 1 回答
  • 0 关注
  • 1475 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信