java线程等待
Ⅰ 在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 block
e.printStackTrace();
}
}
}
public static void toNotifyAll(){
synchronized(lock){
lock.notifyAll();
}
}
}
//让线程对象在run方法中调用toWait使其等待,调用静态方法toNotifyAll唤醒所有线程
Ⅱ java中的join是如何让主线程等待的
join就是阻塞调用线程,直到该线程结束后,调用线程才能继续执行。
该影响只存在于执行join方法的线程和调用该线程的线程之间
如在t1线程中调用t2.join(),则需要t2线程执行完后t1方能继续执行
Ⅲ Java如何等待子线程执行结束
先调用
shutdown
在调用
isTerminated
例:
/*
* 采用线程池开启多个子线程,主线程等待所有的子线程执行完毕
*/
public static void moreThread() {
try {
int threadNum = 0;
for (int i = 0; i < 10; i++) {
threadNum++;
final int currentThreadNum = threadNum;
exe.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("子线程[" + currentThreadNum + "]开启");
Thread.sleep(1000*10);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("子线程[" + currentThreadNum + "]结束");
}
}
});
}
System.out.println("已经开启所有的子线程");
exe.shutdown();
System.out.println("shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。");
while(true){
if(exe.isTerminated()){
System.out.println("所有的子线程都结束了!");
break;
}
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("主线程结束");
}
}
Ⅳ java 中有两个线程怎样等待一个线程执行完毕
这个可以有2种解决方案,notify,wait实现 以及CountDownLatch,
我贴一个CountDownLatch的实现
public class Test4 {
class DTask implements Runnable
{
private CountDownLatch downLatch;
private String name;
public DTask(CountDownLatch downLatch,String name)
{
this.downLatch =downLatch;
this.name =name;
}
public void run()
{
if(name.equals("A"))
try {
this.downLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"====>"+i);
}
//if(name.equals("B"))
this.downLatch.countDown();
}
}
public static void test1()
{
ExecutorService service =Executors.newFixedThreadPool(2);
Object obj =new Object();
Test4 tt =new Test4();
CountDownLatch downLatch = new CountDownLatch(1);
service.execute(tt.new DTask(downLatch,"A") );
service.execute(tt.new DTask(downLatch,"B") );
service.shutdown();
}
public static void main(String[] args)
{
test1();
}
}
Ⅳ 这段java 多线程代码为什么id是1的线程一直在等待
从代码来看,每个线程的o都不是同一个。1线程的o.wait()后,只执行了2线程的o.notifyAll()。所以1线程会一直处于等待中。如果要达到你的要求,修改构造函数,去掉o = new Object();这句。因为这句会在每次初始化一个新线程时,改变o的指向。
Ⅵ java callable 怎么让主线程等待
在你的
主线程
中用一个JOIN的方法,你要等待谁,就用谁调用,比如,你要等待线程A结束,就用A.JOIN();这样就可以了。记住哦,这条语句写在哪个线程里,哪个线程就要等待调用这个方法的其他线程。就是说,你在主线程里写了这条语句,那么主线程就要等待线程A执行完后,主线程才会执行
Ⅶ java 线程为什么会排队等待
主要是有共享资源的时候,防止两个以上的线程同时修改,最后结果出错,所以只能让一个线程得到锁,其他线程等待
Ⅷ java 中当一线程处于等待状态时,用什么方法可以将其唤醒
如果线程在睡觉,调用这个线程对象的interrupt方法
如果这个线程在等待一个对象的锁,那么调用那个对象的notifyAll方法
Ⅸ java多线程相互等待
1、存在处以业务逻辑类,存在map,初始化。
2、存在线程池 最大200,ThreadFactory可以默认
3、单线程处理ip的类,构造方法包含是需参数Map,
4、外部循环 调用线程池,生成线程 传参 map 和当前循环次数
5、线程处理完ip后,将外部传来的循环次数做key,结果做value插入map,唤醒主线程判断map中的数量是否==需处理的ip的数量,选择跳出或继续等待。
Ⅹ 等待线程,java问题,怎么解决
简单地可以使用 Thread.join() 方法来等待线程结束,例如这样修改一下:
Thread t = new Thread() { // 同原来的 run()};t.start(); // 调用这个方法,会挂起当前线程直至线程t结束t.join();
join()方法的文档是这么写的: Waits for this thread to die.
也可以用wait/notify或mutex等机制来对两个线程进行同步,稍微复杂一点,例如使用 wait/notify:
new Thread() { public void run() { // 同原来的代码,加上以下代码用于同步 synchronized (results) { results.notifyAll(); } }}.start(); // 通过以下代码挂起当前线程,等待其他线程通知synchronized (results) { results.wait();}
以供参考。
同 i178269245 所说,等待线程结束势必要挂起当前线程,也就没必要用线程了,也许需要重新考虑一下这种实现方式。