黑马程序员技术交流社区

标题: 大家看我写得对不对? [打印本页]

作者: 冉世友    时间: 2013-1-5 19:05
标题: 大家看我写得对不对?
本帖最后由 冉世友 于 2013-1-5 21:18 编辑
  1. 这样能达到操作共享数据的效果吗?
  2. /*
  3. * 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
  4. *将Runnable对象定义为内部类,把共享数据
  5. * 和操作操作共享数据的方法封装到另一个对象中。
  6. */
  7. public class MutiThreadShareData2 {

  8.         public static void main(String[] args) {
  9.                 final ShareData1 shareData1 = new ShareData1();
  10.                 for(int i=0; i<2; i++){
  11.                         new Thread(new Runnable(){
  12.                                 @Override
  13.                                 public void run() {
  14.                                         shareData1.increase();
  15.                                 }
  16.                         }).start();
  17.                         
  18.                         new Thread(new Runnable(){
  19.                                 @Override
  20.                                 public void run() {
  21.                                         shareData1.decrease();
  22.                                 }
  23.                         }).start();
  24.                 }
  25.                
  26.                 try {
  27.                         Thread.sleep(1000);
  28.                 } catch (InterruptedException e) {
  29.                         
  30.                         e.printStackTrace();
  31.                 }
  32.                 System.out.println(shareData1.getJ());
  33.         }
  34. }

  35. class ShareData1 {
  36.         private int j = 100 ;
  37.         
  38.         public synchronized void increase(){
  39.                 j++;
  40.         }
  41.         
  42.         public synchronized void decrease(){
  43.                 j--;
  44.         }
  45.         
  46.         public int getJ(){
  47.                 return j;
  48.         }
  49. }


复制代码

作者: 肖志锋    时间: 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