黑马程序员技术交流社区
标题:
大家看我写得对不对?
[打印本页]
作者:
冉世友
时间:
2013-1-5 19:05
标题:
大家看我写得对不对?
本帖最后由 冉世友 于 2013-1-5 21:18 编辑
这样能达到操作共享数据的效果吗?
/*
* 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
*将Runnable对象定义为内部类,把共享数据
* 和操作操作共享数据的方法封装到另一个对象中。
*/
public class MutiThreadShareData2 {
public static void main(String[] args) {
final ShareData1 shareData1 = new ShareData1();
for(int i=0; i<2; i++){
new Thread(new Runnable(){
@Override
public void run() {
shareData1.increase();
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
shareData1.decrease();
}
}).start();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(shareData1.getJ());
}
}
class ShareData1 {
private int j = 100 ;
public synchronized void increase(){
j++;
}
public synchronized void decrease(){
j--;
}
public int getJ(){
return j;
}
}
复制代码
作者:
肖志锋
时间:
2013-1-5 20:09
本帖最后由 肖志锋 于 2013-1-5 20:15 编辑
你这样是可以实现数据共享的,唯一一个问题,就是第33行的打印,你这里是主线程执行的永远都是100,因为这个程序多线程语句有点小,你主线程又有休眠的时间,其他线程的++--很快都执行完了,所以根本不会出现其他数据,,我不知道你想做的是什么效果,如果你想要每次加减的时候都显示出来,为什么不在加减方法里面打印呢?或者run方法也可以
作者:
冉世友
时间:
2013-1-5 21:18
肖志锋 发表于 2013-1-5 20:09
你这样是可以实现数据共享的,唯一一个问题,就是第33行的打印,你这里是主线程执行的永远都是100,因为这 ...
嗯,我就是结合了一下两种基本方式,看看行不行的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2