A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冉世友 中级黑马   /  2013-1-5 19:05  /  1238 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冉世友 于 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. }


复制代码

评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 肖志锋 于 2013-1-5 20:15 编辑

你这样是可以实现数据共享的,唯一一个问题,就是第33行的打印,你这里是主线程执行的永远都是100,因为这个程序多线程语句有点小,你主线程又有休眠的时间,其他线程的++--很快都执行完了,所以根本不会出现其他数据,,我不知道你想做的是什么效果,如果你想要每次加减的时候都显示出来,为什么不在加减方法里面打印呢?或者run方法也可以
回复 使用道具 举报
肖志锋 发表于 2013-1-5 20:09
你这样是可以实现数据共享的,唯一一个问题,就是第33行的打印,你这里是主线程执行的永远都是100,因为这 ...

嗯,我就是结合了一下两种基本方式,看看行不行的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马