`
Tristan_S
  • 浏览: 363545 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多线程 主线程调用多个子线程

    博客分类:
  • bf
 
阅读更多
package com.tristan;

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

/**
 * http://dongxuan.iteye.com/blog/901689
 * http://dongxuan.iteye.com/blog/902571
 * @author Administrator
 *
 */
public class TestMultiThread {

	private static ThreadPoolExecutor threadPoolExecutor;
	
	static{
		threadPoolExecutor = new ThreadPoolExecutor(2, 4, 1, TimeUnit.MINUTES, 
				new ArrayBlockingQueue<Runnable>(2),
				new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ExecuteEngine-%s").build());
	}
	
	public static void main(String[] args) throws Exception{
		
		final AtomicLong ai = new AtomicLong(0);
		
		int num = 4;
		for (int i = 0; i < num; i++) {
			Worker worker = new Worker(ai);
			threadPoolExecutor.execute(worker);
		}

		while(true){
			synchronized (ai) {
				if(ai.get() == num){
					break;
				}else{
					ai.wait(1000);
				}
			}
		}
		
		
		System.out.println("end " +  ai.get());
		
	}
	
	
	static class Worker implements Runnable{
		
		AtomicLong ai;
		
		public Worker(AtomicLong ai) {
			this.ai = ai;
		}
		
		@Override
		public void run() {
			Random r = new Random();
			try {
				long time = 1000 + r.nextInt(10*1000);
				System.out.println(Thread.currentThread().getName() + "  "+time);
				Thread.sleep(time);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			ai.incrementAndGet();
			
			synchronized (ai) {
				ai.notify();
			}
		}
	}
}

分享到:
评论

相关推荐

    Unity异步线程调用主线程脚本

    Unity异步线程调用主线程脚本程序,在Unity中异步线程调用主线程会报错,所以编写了一个Loom

    Java多线程实现异步调用实例

    Java多线程实现异步调用实例。运行Main可以看到结果。main是主线程,另有A,B,C三个线程用不同的时间跑完。

    pb多线程(源码)及思路.zip

    通过主线程,调用子线程,然后子线程再调用主线程,通过主线程的两个变量,来判断退出标志,让主线程可以退出。

    C#子线程执行完后通知主线程的方法

    下面小编就为大家带来一篇C#子线程执行完后通知主线程的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    C# 子线程调用主线程窗体的解决方法

    因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的bug,包括争用和死锁的情况。所以VS2005这一改动便可以增强线程安全性。  我想...

    [『辅助』] 易编远航第一期-六套大漠多线程中级进阶视频教程

    使用同步器作为多线程中级教材,主要是对上一套初级教程做一个简单的总结, 并且对接下来脚本的线程处理,及监控线程起到一个较高的实际认知。 对多线程基 础及后续多线程课程有承前启后的作用 主要学习内容: 1....

    串口通信多线程接收数据,发送数据

    串口通信,多线程接收数据,并可以发送数据

    Labview2015多线程异步调用工程

    labview2015关于异步调用功能的研究工程,主要用于解决主线程负责快速轮询,多个子线程负责具体的任务处理并反馈给主线程(子线程需要长时间处理任务),解决单纯的可重复VI不能实现并行的功能。

    用多线程实现串口读写数据以及文件的读写

    适合的读者:初学用多线程实现对串口的异步操作,对线程的理解,以及对串口的读写。还有文件的读写都有最基本的使用方式。调试时,可以用串口调试助手一起结合的去学习~

    C#多线程委托带参数

    *********************************************************...两个线程,利用委托更新主线程listBox1控件的内容,并将线程的名字传递过去 ***********************************************************************

    多线程笔记多线程笔记

    使用java.lang.Thread类或者java....一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。 一旦创建一个新的线程,就产生一个新的调用栈。 线程总体分两类:用户线程和守候线程。

    多线程学习文档

    线程(Thread)是进程中的基本执行单元,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。线程主要是由CPU寄存器、...

    iOS多线程之NSThread详解

    iOS多线程开发一 使用NSThread ...但是需要注意在主线程中仅仅能设置线程状态,并不能真正停止当前线程,如果要终止线程必须在线程中调用exist方法,这是一个静态方法,调用该方法可以退出当前线程。

    多线程并发代码的IntelliJ IDEA中调试方法.docx

    在main()方法中启动两个线程,然后调用thread1.join()和thread2.join(),以使主线程在“线程1”和“线程2”都返回结果之前不会进一步执行。 最后将两个线程的计算结果相加,得到100! + 100000! 下面就让我们使用...

    C#多任务多线程下载组件V1.1(源代码)

    支持多个下载任务,分块多线程下载,断点续传。 (对比上个版本,完成了遗留的功能,修改了事件触发过程及处理方式,重新整理了代码及注释) 内含两个窗体,可视为演示程序。 DownloadForm 下载窗体,含相关事件...

    java多线程

    1. 编写一个实现了Runnable接口的类,这个类中包含3个线程,3个线程的名字是“张工”,“王工”和“老板”。线程“张工”和线程“王工”分别负责“搬运苹果”(3箱)和“搬运香蕉”(3箱),他们每搬运一箱,就准备...

    C#多任务多线程下载组件V1.1[源代码]

    支持多个下载任务,分块多线程下载,断点续传。 (对比上个版本,完成了遗留的功能,修改了事件触发过程及处理方式,重新整理了代码及注释) 内含两个窗体,可视为演示程序。 DownloadForm 下载窗体,含相关事件...

    Java多线程大量调用百度地图的搜索功能,来做课程作业数据准备

    Java多线程大量调用百度地图的搜索功能,来做课程作业数据准备 读取xls 采用了apache.poi,说实话,使用体验上来说肯定没有python的pandas还用, 多线程共享资源 主要共享的就是一个sheet对象和访问列标row_number...

    多线程阻塞服务器程序(tcp)

    在服务端应用程序的主线程中不停的调用accept操作,以使服务端程序能不停地接受客户端程序发送过来的连接请求。而在接受了一个客户端的连接请求后,为每一个接受的连接请求开辟一个专门的线程来接受客户端程序发送的...

Global site tag (gtag.js) - Google Analytics