`

java.util.concurrent 范例之一

    博客分类:
  • Java
阅读更多
java.util.concurrent 之一

package test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestThreadPool {
	public static void main(String args[]) throws InterruptedException{
	// only two threads
	ExecutorService exec = Executors.newFixedThreadPool(2);
	for(int index=0; index < 10; index++){
		Runnable run = new Runnable(){
			public void run(){
				long time = (long)(Math.random() * 1000);
				System.out.println("Sleeping " + time + "ms");
				try{
					Thread.sleep(time);
				}	catch(InterruptedException e){
				}
			}
		};
		exec.execute(run);
	}	// must shutdown
	exec.shutdown();
}
	}


可能的运行结果:
Sleeping 543ms
Sleeping 33ms
Sleeping 658ms
Sleeping 740ms
Sleeping 145ms
Sleeping 216ms
Sleeping 890ms
Sleeping 864ms
Sleeping 786ms
Sleeping 644ms


    上面是一个简单的例子。使用大小为2的线程池来处理10个线程。
它使用了Executors的静态函数 newFixedThreadPool() 生成一个固定的线程池。顾名思义,
线程池是不会释放的,即使它是Idle。这就会产生性能问题。比如如果线程池的大小为200,当全部使用完毕后,
所有的线程会继续留在池中,相应的内存和线程切换(while(true)+sleep)都会增加。如果要避免这个问题,就
必须直接使用ThreadPoolExecutor()来构造。可以像Tomcat的线程池一样,设置“最大线程数”、“最小线程数”
和“空闲线程keepAlive的时间”。通过这些可以基本上替换Tomcat的线程池实现方案。
需要注意的是线程池必须使用shutdown来显式关闭,否则主线程就无法退出。
分享到:
评论

相关推荐

    [JAVA编程模式与范例].zip

    - 探索Java并发包(java.util.concurrent),理解线程池、并发工具类如Semaphore、CountDownLatch等。 - 熟悉JDBC API,包括Connection、Statement、PreparedStatement、ResultSet等对象的使用。 5. **实战项目与...

    java 多线程交互简单范例

    在`Producer`和`Consumer`线程的交互过程中,可能还会用到阻塞队列(如`java.util.concurrent`包中的`BlockingQueue`接口)等高级并发工具,它们内置了线程同步机制,可以简化代码并提高性能。 总结来说,这个...

    java并发编程实战范例(由浅入深代码范例和详细说明)(合集).docx

    3. 使用`ReentrantLock`:如果需要更细粒度的锁控制,可以使用`java.util.concurrent.locks.ReentrantLock`,它提供了公平锁和非公平锁的选择,以及可中断和定时等待的特性。 4. 使用`ConcurrentHashMap`:在并发...

    Android图片批量上传

    可以使用`java.util.concurrent.ExecutorService`、`java.util.concurrent.Future`,或者`android.os.AsyncTask`来实现异步上传。现在更推荐使用`java.util.concurrent`包下的工具,因为`AsyncTask`已被标记为废弃。...

    java线程池threadpool简单使用源码

    在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和相关的实现,如`ThreadPoolExecutor`,它是线程池的核心。`ExecutorService`接口定义了添加任务、启动线程池、关闭线程池等方法。`...

    Java编程模式与范例基础开发技巧

    Java提供了丰富的并发工具类,如ExecutorService、Semaphore、CyclicBarrier等,以及synchronized关键字和java.util.concurrent包下的原子类,帮助开发者编写高效的多线程程序。 9. **反射**: 反射允许程序在...

    Java中如何调用matlab代码,实现完美的数据建模分析效果 系列代码范例 含说明.docx

    import java.util.concurrent.Future; public class GetResultFromMatlab { public static void main(String[] args) { try { MatlabEngine matlab = MatlabEngine.startMatlab(); // 在 Matlab 中计算 ...

    工作线程处理后台范例

    1. 使用`java.util.concurrent`包下的ExecutorService和Future接口,创建线程池并提交任务。 2. 在工作线程中使用`synchronized`关键字进行同步,确保对共享资源的访问是线程安全的。 3. 使用`volatile`关键字标记...

    生产者与消费者实例代码,线程学习必备

    - 使用`java.util.concurrent`包中的`BlockingQueue`接口,如`ArrayBlockingQueue`,它内置了线程安全的队列操作。 - 生产者使用`put()`方法将数据放入队列,若队列已满,会自动阻塞。 - 消费者使用`take()`方法...

Global site tag (gtag.js) - Google Analytics