java 多线程 同步
2014-05-13 14:54
375 查看
import java.lang.Thread; import java.lang.String; class Person { public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getAge(){ return age; } public void setAge(int age){ if(age > 0){ this.age = age; } } public String toString(){ return "< " + name + " , " + age + " >"; } public synchronized void set(String name, int age){ if(flag){ try { super.wait(); }catch(Exception e){ e.printStackTrace(); } } try { Thread.sleep(100); } catch(InterruptedException e){ e.printStackTrace(); } this.name = name; this.age = age; flag = true; super.notify(); } public synchronized void get(){ if(!flag){ try { super.wait(); }catch(Exception e){ e.printStackTrace(); } } try { Thread.sleep(100); } catch(InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread().toString() + this.toString()); flag = false; super.notify(); } private String name = "default"; private int age = 10; private boolean flag = false; } class Customer implements Runnable { Customer(Person info){ this.info = info; } private Person info = null; public void run(){ for(int i=0;i<10;++i){ try { Thread.sleep(100); } catch(InterruptedException e){ e.printStackTrace(); } info.get(); } } } class Producter implements Runnable { Producter(Person info){ this.info = info; } private Person info = null; private boolean flag = false; public void run(){ for(int i=0;i<10;++i){ if(flag){ info.set("zjm", i+20); flag = false; } else { info.set("cr", i+30); flag = true; } } } } public class Test { public static void main(String args[]){ Person info = new Person(); Customer cr = new Customer(info); Producter pr = new Producter(info); Thread thread1 = new Thread(cr,"11111"); Thread thread2 = new Thread(pr,"33333"); thread1.start(); thread2.start(); } }
result:
Thread[11111,5,main]< cr , 30 >
Thread[11111,5,main]< zjm , 21 >
Thread[11111,5,main]< cr , 32 >
Thread[11111,5,main]< zjm , 23 >
Thread[11111,5,main]< cr , 34 >
Thread[11111,5,main]< zjm , 25 >
Thread[11111,5,main]< cr , 36 >
Thread[11111,5,main]< zjm , 27 >
Thread[11111,5,main]< cr , 38 >
Thread[11111,5,main]< zjm , 29 >
相关文章推荐
- 67 Java 内部类
- myeclipse 10.0 激活心得
- JBoss的安装与配置
- 二分排序(java语言)
- Java
- 常数变易法_打印图形
- 装饰模式
- struts2 结合extjs实现的一个登录实例
- java实现事件委托
- struts的MVC详细实现
- Divide Two Integers
- Java学习(一)
- ubuntu12.04 安装java jdk6
- Java中的图形界面编程
- struts的由来
- java cas 非阻塞学习
- 转载和积累系列 - java中Keytool的使用总结
- 转: 深入分析Java ClassLoader原理
- ControlCircle
- Java内存分配全面浅析