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

Java学习之路0806<复习>(线程wait 、notify)

2015-08-16 20:15 447 查看
public class MyRunnable1 implements Runnable{
String Lock1="abc";
String Lock2="def";
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("1开始启动");
synchronized (Lock1) {
//          try {
//              Thread.sleep(1000);
//          } catch (InterruptedException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }
System.out.println("释放Lock1,等待Lock2");
try {
Lock1.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("等待Lock2");
synchronized (Lock2) {
System.out.println("等到了Lock2,1完成");
}
}
}
}


public class MyRunnable2 implements Runnable{
String Lock1="abc";
String Lock2="def";
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("2开始启动");
synchronized (Lock2) {
//          try {
//              Thread.sleep(1000);
//          } catch (InterruptedException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }
System.out.println("等待Lock1");
synchronized (Lock1) {
System.out.println("2完成");
System.out.println("唤醒lock1");
Lock1.notify();
}
}
}

}


public class RunnableTest {
public static void main(String[] args) {
MyRunnable1 r1=new MyRunnable1();
MyRunnable2 r2=new MyRunnable2();
Thread t1=new Thread(r1);
Thread t2=new Thread(r2);
t1.start();
//      try {
//          Thread.sleep(3000);
//      } catch (InterruptedException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
t2.start();
}
}


运行结果:

1开始启动

释放Lock1,等待Lock2

2开始启动

等待Lock1

2完成

唤醒lock1

等待Lock2

等到了Lock2,1完成

生产者与消费者

public class Product {
private int num;

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}

}


public class Consumer implements Runnable{
private Product pro;
public Consumer(Product pro) {
this.pro=pro;
}

@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (pro) {
System.out.println("消费者到仓库");
if (pro.getNum()!=0) {
System.out.println("消费了一件产品");
pro.setNum(0);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
pro.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

}


public class Producer implements Runnable{
private Product pro;
public Producer(Product pro) {
this.pro=pro;
}

@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
synchronized (pro) {
System.out.println("生产者生产");
if (pro.getNum()==0) {
System.out.println("生产一件产品");
pro.setNum(1);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pro.notify();
}
}
}

}


public class ProductTest {
public static void main(String[] args) {
Product pro=new Product();
Producer producer=new Producer(pro);
Consumer consumer=new Consumer(pro);
Thread t1=new Thread(producer);
Thread t2=new Thread(consumer);
t1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2.start();
}
}


运行结果:

生产者生产

生产一件产品

消费者到仓库

消费了一件产品

生产者生产

生产一件产品

消费者到仓库

消费了一件产品

生产者生产

生产一件产品

消费者到仓库

消费了一件产品

生产者生产

生产一件产品

消费者到仓库

消费了一件产品

生产者生产

生产一件产品

消费者到仓库

消费了一件产品
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: