黑马程序员技术交流社区

标题: 用单例弄出来的两个线程通讯问题!求优化。。。 [打印本页]

作者: skill20    时间: 2014-4-23 18:27
标题: 用单例弄出来的两个线程通讯问题!求优化。。。
本帖最后由 skill20 于 2014-4-23 19:13 编辑
  1. public class  LockTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Thread t1 = new Thread(new InterPut());
  6.                 Thread t2 = new Thread(new OutPut());
  7.                 t1.start();
  8.                 t2.start();
  9.         }
  10. }
  11. class InterPut implements Runnable
  12. {
  13.         Person  a = Person.getS();
  14.         boolean f;
  15.         public void run()
  16.         {
  17.                 int x = 0;
  18.                 while(true)
  19.                 {
  20.                         if(x == 0)
  21.                                 a.set("zhangya_________",23);
  22.                         else
  23.                                 a.set("chenghu——————————————",26);
  24.                         x = (x + 1)%2;
  25.                 }
  26.         }
  27. }
  28. class OutPut implements Runnable
  29. {
  30.         Person b = Person.getS();
  31.         public void run()
  32.         {
  33.                 while(true)
  34.                 {
  35.                         b.get();
  36.                 }
  37.         }
  38. }
  39. class Person
  40. {
  41.         private static boolean flag;
  42.         private static String name;
  43.         private static int age;
  44.         private static Person s = new Person("lishi",45);
  45.         private Person(String name, int age)
  46.         {
  47.                 s.name = name;
  48.                 s.age = age;
  49.         }
  50.         public static  Person getS()
  51.         {
  52.                 return s;
  53.         }
  54.         public synchronized void set(String name , int age)
  55.         {
  56.                 if(flag == true)
  57.                         try{ s.wait();}
  58.                         catch(Exception e){}
  59.                 s.name = name;
  60.                 s.age = age;
  61.                 flag = true;
  62.                 s.notify();
  63.         }
  64.         public synchronized void get()
  65.         {
  66.                 if(flag == false)
  67.                         try{ s.wait();}
  68.                         catch (Exception e){}
  69.                 System.out.println(s.name + s.age);
  70.                 flag = false;
  71.                 s.notify();
  72.         }
  73. }
复制代码






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2