在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唤醒所有线程

请教多线程间等待的问题怎样实现比较简单?
最简单的方法就是在系统中设置全局标志,设置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 中怎样实现主线程等待其他线程执行完毕!!
在你的主线程中用一个JOIN的方法,你要等待谁,就用谁调用,比如,你要等待线程A结束,就用A.JOIN();这样就可以了。记住哦,这条语句写在哪个线程里,哪个线程就要等待调用这个方法的其他线程。就是说,你在主线程里写了这条语句,那么主线程就要等待线程A执行完后,主线程才会执行。
设置标志,等待标志转换
加一个标志判断

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