线程等待的方法(java线程等待与唤醒)

      最后更新:2023-03-27 12:29:04 手机定位技术交流文章

      在java中同时起多个线程,然后怎么让多个线程进入等待状态?

      class MyThread extends Thread { static Object lock = new Object();public void run() {// TODO Auto-generated method stub}public void toWait() {synchronized(lock){try {lock.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void toNotifyAll(){synchronized(lock){lock.notifyAll();}}} //让线程对象在run方法中调用toWait使其等待,调用静态方法toNotifyAll唤醒所有线程
      在java中同时起多个线程,然后怎么让多个线程进入等待状态?

      请教多线程间等待的问题怎样实现比较简单?

      最简单的方法就是在系统中设置全局标志,设置a结束标志, 1号线程结束了之后设置这个标志位,2号一直读取这个标志,如果没有ready就一直sleep(50)这种。3号同理。设置全局变量可以再一个3个线程都能读取到的地方设置,也可以做成一个包含a.b变量和标志的structure 作为参数传给3个线程. 事实上,a,b本身就可以作为标志,根据它的类型,比如不为null, 不为零之类的都可以作为上一个线程结束的标注。
      请教多线程间等待的问题怎样实现比较简单?

      如何等待线程结束

      首先子线程必须由主线程启动,所以严格意义上的“子线程结束后再执行主线程”是不可能实现,你的意思应该是:主线程创建完子线程后,等待子线程退出,在继续执行。 你的代码基本没有多大问题,只是 Join 方法位置放置不对。thread1.Start(); // 先启动所有子线程thread2.Start();thread3.Start();thread4.Start();thread5.Start();thread1.Join(); // 然后在等待子线程退出thread2.Join();thread3.Join();thread4.Join();thread5.Join();你先前的代码:thread1.Start();// 线程1 启动thread1.Join(); // 等待 线程1 退出,线程1 未退出前,后面代码无法执行thread2.Start();// 以下代码,均同上所述。thread2.Join();thread3.Start();thread3.Join();thread4.Start(); thread4.Join();
      如何等待线程结束

      java线程wait方法

      wait和notify是用在多线程竞争同一锁资源的情况下使用的。你这段代码实际是个单线程,这个线程自己把自己阻塞了,自然不可能自己把自己唤醒。你的意图怎么实现呢?需要加入另外一个线程,下面是我仿照你的意图写的一段代码,供参考下public class A{    public A(){        final A a = this;        Thread th1 = new Thread(){            @Override            public void run(){                //一直循环,去尝试着唤醒a                try                {                    this.sleep(10000);                } catch (InterruptedException e)                {                    // TODO Auto-generated catch block                    e.printStackTrace();                }//为检查是不是能真正实现唤醒a,等待10000毫秒,此时保证a已经处于等待状态中。                while(true){                    /**                     * 用notify唤醒的线程必须是持有当前锁对象的线程                     */                    synchronized (a){                        a.notify();                    }                }            }        };        th1.setDaemon(true);//这句也是必须的,将th1设为守护线程,保证在唤醒a以后,所有活动的线程都为守护线程,jvm能及时推出        th1.start();//和a.run的顺序不可以换        this.run();    }        public static void main(String[] args)    {        new A();    }    public void run()    {        /**         * 这里可以换成这样,直接锁住this就行了         */        synchronized (this)        {            try            {                                this.wait();//阻塞当前的线程            } catch (InterruptedException e)            {                // TODO Auto-generated catch block                e.printStackTrace();            }finally{                System.out.println("1");//执行finally            }        }                    }    }
      finally里面的代码会执行指的是在try-catch-finally中catch代码中发生了异常,程序无法执行下去,但是finally中的语句会执行(除非jvm退出,比如在finally之前谢了System.exit(0);). 可你这个代码里面也没有抛出异常啊。。 对,一直等着呢。。
      错误太多1. 错误太多1.wait notify 是用在多线程的地方,你这就一个线程,自己把自己阻塞了,怎么可能还跑的下去2.看这段:Z alias1 = this;Z alias2 = this;synchronized(alias1) {try {alias2.wait(); alias1,alias2根本就是一个对象的不同引用,有必要定义两个吗,而且都指向this,无语,直接用this不就完了synchronized(this),
      wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 wait属于Object的成员方法,一旦一个对象调用了wait方法,必须要采用notify()和notifyAll()方法唤醒该进程;如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,这个线程就会释放它持有的所有同步资源,而不限于这个被调用了wait()方法的对象。wait()方法也同样会在wait的过程中有可能被其他对象调用interrupt()方法而产生
      java线程wait方法

      java 中怎样实现主线程等待其他线程执行完毕!!

      在你的主线程中用一个JOIN的方法,你要等待谁,就用谁调用,比如,你要等待线程A结束,就用A.JOIN();这样就可以了。记住哦,这条语句写在哪个线程里,哪个线程就要等待调用这个方法的其他线程。就是说,你在主线程里写了这条语句,那么主线程就要等待线程A执行完后,主线程才会执行。
      设置标志,等待标志转换
      加一个标志判断
      java 中怎样实现主线程等待其他线程执行完毕!!

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/60801.html

          热门文章

          文章分类