Java多线程消费者、生产者的基本思路

 

 多线程主要考察的就是 线程的同步控制   生产者消费者的思路就是,当 一个线程执行时让另外一个线程 挂起就好了多线程

 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(); } } }
相关文章
相关标签/搜索