多线程主要考察的就是 线程的同步控制 生产者消费者的思路就是,当 一个线程执行时让另外一个线程 挂起就好了多线程
ThreadOne、ThreadTwo同时运行,添加一个变量在一个公共类(下边的Function类)中,ide
例如:当变量为true,ThreadOne执行ThreadTwo挂起;this
当变量为false,ThreadOne挂起ThreadTwo执行spa
一个线程执行完以后,本身重置变量(目的是把本身挂起),而后唤醒另外一个挂起的线程,如此即可使两个线程交替执行线程
对于消费者、生产者来讲:code
当消费者拿不到东西的时候就把本身挂起,而且唤醒生产者就能够了blog
当生产者生产完东西的时候就把本身挂起,而且唤醒消费者就能够了同步
//这是一个共享的类,主线程和子线程共用
class Function{ private boolean flag=false; //子线程要实现的功能
public synchronized void sub(){ while(flag){ //此处用while循环而不是用if语句判断是为了防止 线程的假唤醒
try { this.wait(); //此处的this指的是当前执行此段代码的线程 } catch (InterruptedException e) { e.printStackTrace(); } } for(int i=0;i<10;i++){ //for循环内定义子线程的功能,这里简单的假设为打印一句话,主线程同理
System.out.println("sub"+i); } flag=true; this.notify(); } //主线程要实现的功能
public synchronized void main(){ while(!flag){ //此处用while循环是为了 防止线程的假唤醒
try { this.wait(); //此处this指的是当前执行此段代码的线程 } catch (InterruptedException e) { e.printStackTrace(); } } for(int i=0;i<10;i++){ System.out.println("main"+i); } flag=false; this.notify(); } } public class Demo01 { public static void main(String[] args) { final Function f=new Function(); new Thread( new Runnable(){ @Override public void run() { for(int i=0;i<50;i++){ f.sub(); } } } ).start(); for(int i=0;i<50;i++){ f.main(); } } }