最近在做接口的时候总是遇到一个for语句中 每次循环会涉及很多资源,包括 ftp io db,总想用现场来控制太.找到一篇文章 http://daoger.iteye.com/blog/142485 写的不错.自己写了2个demo
1. 主线程不等待
public class CopyOfTestThreadPool {
public static void main(String args[]) throws InterruptedException {
// only two threads
ExecutorService exec = Executors.newFixedThreadPool(20);
List<Long> list = new ArrayList<Long>();
for(int index = 0; index < 1000000; index++){
list.add(System.nanoTime());
}
long start = System.currentTimeMillis();
for (Long long1 : list) {
final Long l = long1;
exec.execute(new Runnable(){
public void run() {
System.out.println(l);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}
// must shutdown
exec.shutdown();
long end = System.currentTimeMillis();
System.out.print("共计用时 ");
System.out.println(end - start);
}
}
2 主线程会等待
public class TestCountDownLatch {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
// 开始的倒数锁
final CountDownLatch begin = new CountDownLatch(1);
// 结束的倒数锁
final CountDownLatch end = new CountDownLatch(10000);
// 十名选手
final ExecutorService exec = Executors.newFixedThreadPool(10);
for (int index = 0; index < 10000; index++) {
final int NO = index + 1;
Runnable run = new Runnable() {
public void run() {
try {
begin.await();
Thread.sleep((long) (Math.random() * 10));
} catch (InterruptedException e) {
} finally {
end.countDown();
}
}
};
exec.submit(run);
}
System.out.println("Game Start");
begin.countDown();
end.await();
System.out.println("Game Over");
exec.shutdown();
System.out.print("共计用时 ");
System.out.println(System.currentTimeMillis() - start);
}
}
详细看上面那位老兄的blog
分享到:
相关推荐
Java提供了wait(), notify()和notifyAll()方法,这些方法用于在线程间交换信息,但必须在同步块中使用,以防止死锁和其他并发问题。此外,还有java.util.concurrent工具包,包含如BlockingQueue等高级并发结构,它们...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
总之,“Java多线程编程指南”将涵盖这些核心概念,并可能深入到高级话题,如线程池的优化、并发容器的使用以及并发编程的最佳实践,帮助读者提升在多线程环境下的编程能力。通过深入学习和实践,开发者能够构建出...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
### Java多线程编程经验 #### 一、Java线程:概念与...Java多线程编程是Java开发中的重要部分,涉及到线程的创建、启动、同步、通信等多个方面。掌握这些基本概念和技术对于开发高效稳定的多线程应用程序至关重要。
Java多线程编程是Java开发中的重要组成部分,尤其在当今并发处理需求日益增长的时代,对多线程的理解和掌握显得尤为重要。《Java多线程编程(第二版)》这本书深入探讨了这一主题,旨在帮助开发者更好地理解和应用...
在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....
本知识点将深入探讨Java多线程编程模板,帮助开发者理解和掌握如何在Java中创建、管理和同步线程。 一、线程的创建 在Java中,有两种主要的线程创建方式: 1. 继承Thread类:创建一个新的类,该类继承自Thread类,...
Java数组是程序设计中的基本构建块,它允许程序员存储多个相同类型的数据在一个...以上就是关于Java数组、Java环境配置以及Java多线程编程的相关知识点。掌握这些内容,可以帮助开发者编写更高效、更健壮的Java程序。
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本PDF文档详细讲解了Java多线程的相关...
Java的并发包java.util.concurrent是Java多线程编程中的重要组成部分,它提供了比原生的java.lang.Thread类和synchronized关键字更高级的并发工具。比如,它提供了线程池的实现(如ExecutorService和...
在进行多线程编程时,还需要考虑异常处理和线程生命周期管理。线程可能因为各种原因抛出异常,必须确保这些异常能够被正确捕获和处理,以免程序崩溃。同时,当线程完成任务或者遇到错误时,应当及时停止线程,释放...
本篇文章将深入探讨如何实现线程的协同、停止、暂停以及继续等操作,这些都是多线程编程中的核心概念。 1. **线程的协同(协作式线程调度)** 在Java中,线程的协同主要通过`wait()`和`notify()`或`notifyAll()`...
这个"多线程concurrent的用例"压缩包中很可能包含了一些示例代码,帮助我们理解和实践如何在Java中使用这些并发工具。 在Java中,创建线程主要有两种方式:继承`Thread`类和实现`Runnable`接口。`concurrent`包提供...
在Java中,多线程编程可以通过直接操作`java.lang.Thread`类或实现`Runnable`接口实现。 2. 使用多线程的原因:现代计算机硬件通常具备多核处理器,多线程能充分利用硬件资源,提高程序响应速度和并发处理能力。 三...
Java多线程编程的核心在于理解和利用操作系统中的线程和进程概念。**进程**是系统进行资源分配和调度的基本单位,每个进程拥有独立的内存空间。而**线程**则是进程中的执行流程,它们共享所属进程的内存资源,这使得...
在Java中,多线程不仅提供了并发性,还能有效地利用CPU资源,尤其在网络应用和高交互性的环境中,多线程编程显得尤为重要。 8.1.1 什么是多线程 多线程编程是指在一个程序中包含多个并发执行的代码流,即线程。线程...
《Java多线程编程》第三版是一本深入探讨Java并发编程的权威指南,旨在帮助开发者理解和掌握Java平台上的多线程技术。这本书详尽地介绍了如何有效地利用多核处理器的性能,以及如何在复杂的并发环境中设计和实现高效...
此外,Java 5引入了`java.util.concurrent`包,包含如`ExecutorService`, `Future`, `Callable`, `Semaphore`, `CyclicBarrier`, `CountDownLatch`等高级并发工具类,这些工具极大地简化了多线程编程。 在并发编程...
总的来说,Java弹球小游戏是一个很好的学习多线程编程的实际案例。它展示了如何在Java中创建和管理线程,如何处理用户输入,以及如何通过同步机制保证游戏逻辑的正确性。通过深入理解这个项目,开发者可以提升在实际...