在单个程序中同时运行多个Thread完成不同的工作,称为多线程,它让众多编程人员又爱又恨,它的好处可以同时处理同一事件,让占据时间长的任务在后台运行,可以释放资源内存,但也存在缺点,用多了会造成死锁,程序性能变差,不好控制。

        讲了这么多,现在切入主题,在我们的日常生活中,线程同步用处比比皆是,例如:街道上红绿灯,银行的存钱取钱等。现在我们就来看看同步线程的生产者消费者的例子吧。看如下代码:

       

package product;

import java.util.concurrent.locks.Lock;

public class Factory {

 static int j = 0;

 public static void main(String[] args) {

  // new内部类,需实例化一个factory对象
  Factory factory = new Factory();

  Object lock = new Object();

  ProductThread productThread = factory.new ProductThread(lock);
  productThread.setName("ProductThread");
  productThread.start();

  CustomeThread customeThread = factory.new CustomeThread(lock);
  customeThread.setName("CustomeThread");
  customeThread.start();

 }

 // 生产者
 class ProductThread extends Thread {

  Object lock;

  public ProductThread(Object lock) {
   super();
   this.lock = lock;
  }

  public void run() {
   synchronized (lock) {

    for (int i = 0; i < 10; i++) {
     j++;
     System.out.println("j(" + Thread.currentThread().getName()
       + ")" + "=" + j);
     lock.notify();

     try {
      lock.wait();
     } catch (InterruptedException e) {
      e.printStackTrace();
     }

    }
   }
  }
 }

 // 消费者
 class CustomeThread extends Thread {

  Object lock;

  public CustomeThread(Object lock) {
   super();
   this.lock = lock;
  }

  public void run() {
   synchronized (lock) {

    for (int i = 0; i < 10; i++) {
     j--;
     System.out.println("j(" + Thread.currentThread().getName()
       + ")" + "=" + j);
     lock.notify();

     try {
      lock.wait();
     } catch (InterruptedException e) {
      e.printStackTrace();
     }

    }
   }
  }
 }
}