资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

java线程等待代码 JAVA线程等待

java中请问如何等待一个线程结束在运行其他的代码?

使用java的线程同步机制。

成都创新互联公司是一家集网站建设,朝阳县企业网站建设,朝阳县品牌网站建设,网站定制,朝阳县网站建设报价,网络营销,网络优化,朝阳县网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

现在存在两个线程a和b,伪代码如下:

在a的代码中:

b.start();//启动b线程

synchronized(b) b.wait();//a线程中采用同步,并进行等待

c.execute();

在b线程结束时调用synchronized(this) notify();

这样就可以达到b不结束,a线程就不会继续执行c。

注释:如果看不明白建议先学习一下java线程同步机制。

java多线程相互等待

1、存在处以业务逻辑类,存在map,初始化。

2、存在线程池 最大200,ThreadFactory可以默认

3、单线程处理ip的类,构造方法包含是需参数Map,

4、外部循环 调用线程池,生成线程 传参 map 和当前循环次数

5、线程处理完ip后,将外部传来的循环次数做key,结果做value插入map,唤醒主线程判断map中的数量是否==需处理的ip的数量,选择跳出或继续等待。

用JAVA实现线程等待提示框[3]

② TestThread类

TestThread类是处理事务线程 即在标准输出设备上显示从 到

 public class TestThread extends Thread {public void run(){ for (int i = ; i ; i++ ) {System out println(i); }} }

③ ThreadDiag类

ThreadDiag类用来显示 线程正在运行 提示框

 import java awt *;import javax swing *;public class ThreadDiag extends Thread{ private Thread currentThread = null;//实际调用时就是TestThread事务处理线程 private String messages = ;//提示框的提示信息 private JFrame parentFrame = null;//提示框的父窗体 private JDialog clueDiag = null;// 线程正在运行 提示框 private Dimension dimensions = Toolkit getDefaultToolkit() getScreenSize(); private int width = dimensions width / height = ; private int left = top = ; public ThreadDiag(JFrame parentFrame Thread currentThread String messages) {this parentFrame = parentFrame;this currentThread = currentThread;this messages = messages;initDiag();//初始化提示框 } protected void initDiag(){clueDiag = new JDialog(parentFrame 正在执行 请等待 true);clueDiag setCursor(new Cursor(Cursor WAIT_CURSOR));JPanel testPanel = new JPanel();JLabel testLabel = new JLabel(messages);clueDiag getContentPane() add(testPanel);testPanel add(testLabel);(new DisposeDiag()) start();//启动关闭提示框线程 }public void run() {//显示提示框int left = (dimensions width width)/ ;int top = (dimensions height height)/ ;clueDiag setSize(new Dimension(width height));clueDiag setLocation(left top);clueDiag show(); }}

lishixinzhi/Article/program/Java/gj/201311/27677

java 如何实现等待子线程结束

有多种实现方式,下面列出两种。

第一种:实现Callable类,使用有返回值的线程,只有线程执行完成后才会返回结果。

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.concurrent.*;

public class Main {

// 初始化一个容量为10的线程池

static final ExecutorService pool = Executors.newFixedThreadPool(10);

public static void main(String[] args) throws ExecutionException, InterruptedException {

ListFutureString futures = new ArrayList();

for (int i = 0; i  3; i++) {

MyThread thread = new MyThread("线程" + i);

futures.add(pool.submit(thread));

}

for (FutureString future : futures) {

String name = future.get();

System.out.println(name + "执行完成...");

}

System.out.println("所有线程执行完成!");

}

}

class MyThread implements CallableString {

private String name;

public MyThread(String name) {

this.name = name;

}

@Override

public String call() throws Exception {

// TODO 执行业务

// 随机延迟,模拟线程耗时

Thread.sleep(1000 + new Random().nextInt(2000));

return name;

}

}

第二种:使用CountDownLatch实现线程计数,代码如下:

import java.util.Random;

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class Main2 {

// 初始化一个容量为10的线程池

static final ExecutorService pool = Executors.newFixedThreadPool(10);

public static void main(String[] args) throws InterruptedException {

int threadCount = 3;

// 初始化CountDownLatch,用于线程计数

CountDownLatch latch = new CountDownLatch(threadCount);

for (int i = 0; i  threadCount; i++) {

MyThread thread = new MyThread("线程" + i, latch);

pool.execute(thread);

}

// 阻塞当前线程,CountDownLatch计数减为0时表示所有线程都执行完毕,才会释放主线程的阻塞

latch.await();

System.out.println("所有线程执行完成!");

}

}

class MyThread implements Runnable {

private String name;

private CountDownLatch latch;

public MyThread(String name, CountDownLatch latch) {

this.name = name;

this.latch = latch;

}

@Override

public void run() {

// TODO 执行业务

// 随机延迟,模拟线程耗时

try {

Thread.sleep(1000 + new Random().nextInt(2000));

} catch (InterruptedException e) {

}

// 计数减一

latch.countDown();

System.out.println(name + "执行完毕...");

}

}

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线程等待代码 JAVA线程等待
标题网址:http://www.cdkjz.cn/article/dooghcg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220