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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© didixyy 中级黑马   /  2015-10-13 15:17  /  488 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.concurrent.locks.ReentrantLock;

  2. class Res
  3. {
  4.         String name, sex;
  5. }

  6. class Input implements Runnable
  7. {
  8.         private Res r;
  9.         private final ReentrantLock lock = new ReentrantLock();

  10.         Input(Res r)
  11.         {
  12.                 this.r = r;
  13.         }
  14.         public void run()
  15.         {
  16.                 int x = 0;
  17.                
  18.                 while (true)
  19.                 {
  20.                         lock.lock();
  21.                         try
  22.                         {
  23.                                 if (x == 0)
  24.                                 {
  25.                                         r.name = "张三";
  26.                                         r.sex = "男";
  27.                                 } else
  28.                                 {
  29.                                         r.name = "zhan";
  30.                                         r.sex = "nv";
  31.                                 }       
  32.                         }
  33.                         finally
  34.                         {
  35.                                 x = (x + 1) % 2;
  36.                                 lock.unlock();
  37.                         }
  38.                 }
  39.                
  40.         }
  41. }

  42. class Output implements Runnable
  43. {
  44.         private Res r;

  45.         Output(Res r)
  46.         {
  47.                 this.r = r;
  48.         }

  49.         public void run()
  50.         {
  51.                 while (true)
  52.                 {
  53.                         System.out.println(r.name + "           " + r.sex);
  54.                 }

  55.         }

  56. }

  57. public class ThreadTel
  58. {
  59.         public static void main(String[] args)
  60.         {
  61.                 Res r = new Res();
  62.                 Input in = new Input(r);
  63.                 Output out = new Output(r);
  64.                 Thread t1 = new Thread(in);
  65.                 Thread t2 = new Thread(out);
  66.                 t1.start();
  67.                 t2.start();
  68.         }

  69. }
复制代码

已经通过LOCK UNLOCK的方式给需要同步的代码加上了锁,为什么还是会出现安全性的问题呢

3 个回复

倒序浏览
OutPut里面也加上了同步锁也还是不行
  1. class Output implements Runnable
  2. {
  3.         private Res r;
  4.         private final ReentrantLock lock = new ReentrantLock();
  5.         Output(Res r)
  6.         {
  7.                 this.r = r;
  8.         }

  9.         public void run()
  10.         {
  11.                 while (true)
  12.                 {
  13.                         lock.lock();
  14.                         try
  15.                         {
  16.                                 System.out.println(r.name + "           " + r.sex);
  17.                         }
  18.                         finally
  19.                         {
  20.                                 lock.unlock();
  21.                         }
  22.                        
  23.                 }

  24.         }

  25. }
复制代码
回复 使用道具 举报
Gender也是性别的意思 , sex好像用着不是很

点评

不要在意这些细节。。  发表于 2015-10-14 15:52
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马