您的位置:首页 > 编程语言 > Java开发

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 >
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: