import java.util.concurrent.*; public class ExecutorsTest { public static void main(String[] args) { //ExecutorService threadPool = Executors.newFixedThreadPool(3);//固定大小线程池 //ExecutorService threadPool = Executors.newCachedThreadPool();//根据需要创建线程 ExecutorService threadPool = Executors.newSingleThreadExecutor();//创建单个线程,可以解决:线程死掉后可以重新启动线程的问题。实际上是新建一个线程,跟重新启动线程效果一样 for(int i=0;i<10;i++) { final int task = i+1; threadPool.execute(new Runnable(){ public void run() { for(int j=0;j<10;j++) System.out.println(Thread.currentThread().getName()+" loop of "+(j+1)+" task of "+task); } }); } threadPool.shutdown();//关闭线程池 System.out.println("all of 10 tasks have committed"); } }
import java.util.concurrent.*; public class ExecutorsTest { public static void main(String[] args) { ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3); /*threadPool.schedule(new Runnable(){ public void run() { System.out.println(Thread.currentThread().getName()+" bombing"); } }, 2, TimeUnit.SECONDS); thradPool.shutdown(); */ threadPool.scheduleAtFixedRate(new Runnable(){ public void run() { System.out.println("bombing"); } }, 2, 1, TimeUnit.SECONDS); } }
import java.util.concurrent.*; public class ExecutorsTest { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(3); Future<Integer> future = threadPool.submit(new Callable<Integer>(){ public Integer call()throws Exception { System.out.println(Thread.currentThread().getName()); Thread.sleep(2000); return 3; } }); try{ System.out.println("main thread is coming"); Integer res = future.get();//get()方法会造成线程阻塞 System.out.println(res); }catch(Exception e){} threadPool.shutdown(); } }
import java.util.concurrent.*; import java.util.*; public class ExecutorsTest { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(3); Collection<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>(); Callable<Integer> task1 = new Callable<Integer>(){ public Integer call()throws Exception { System.out.println(Thread.currentThread().getName()+" task 1"); Thread.sleep(2000); return 111111; } }; Callable<Integer> task2 = new Callable<Integer>(){ public Integer call()throws Exception { System.out.println(Thread.currentThread().getName()+" task 2"); Thread.sleep(2000); return 222222; } }; Callable<Integer> task3 = new Callable<Integer>(){ public Integer call()throws Exception { System.out.println(Thread.currentThread().getName()+" task 3"); Thread.sleep(2000); return 333333; } }; tasks.add(task1); tasks.add(task2); tasks.add(task3); System.out.println(tasks); try{ List<Future<Integer>> retval = threadPool.invokeAll(tasks);//同时执行多个任务 for(int i=0;i<retval.size();i++) { Integer res = retval.get(i).get();//get()方法会造成线程阻塞 System.out.println(res); } }catch(Exception e){} threadPool.shutdown(); } }
相关推荐
1. **多线程**:讲解了Java中的并发编程,包括线程的创建、同步机制(如synchronized关键字和java.util.concurrent包)、死锁与活锁的概念,以及如何处理线程安全问题。 2. **网络编程**:介绍了Java的网络API,...
另外,作者还深入讨论了如何在多线程环境中使用函数式接口,例如在`java.util.concurrent`包中,`Callable`接口和`Future`接口可以与函数式接口结合起来使用,以支持异步处理和结果获取。 为了更好地理解函数式接口...
这些书籍可能会详细解析`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及如何使用`java.util.concurrent`包中的工具类,如`ExecutorService`, `Semaphore`, `CyclicBarrier`等来管理和控制线程...
5. **多线程**:Java的并发编程是通过`java.lang.Thread`和`java.util.concurrent`包实现的。`ExecutorService`、`Future`、`Callable`等接口和类简化了多线程的管理和任务执行。 6. **网络编程**:`java.net`包...
8. **多线程**:除了`Thread`类,`java.util.concurrent`包提供了高级的并发工具,如`ExecutorService`、`Future`、`Semaphore`等,便于管理和控制并发任务。 9. **日期时间API**:Java 8引入了新的日期时间API (`...
在编程领域,尤其是在Java开发中,创建一个定时关机程序是一项常见的练习,它能帮助我们理解如何使用系统调用和时间管理。这个"JAVA定时关机程序源代码"是一个很好的学习资源,特别是对于初学者来说,它能深入理解...
5. **多线程**:在`java.lang.Thread`和`java.util.concurrent`包中,Java提供了对多线程的支持。`Thread`类代表程序中的执行线程,而`ExecutorService`和`Future`接口则提供了线程池和异步任务的管理。 6. **网络...
在Java中,`java.util.concurrent.ThreadPoolExecutor`类提供了自定义线程池的能力,允许我们设置核心线程数、最大线程数、线程空闲时间、任务队列等参数,以适应不同的并发需求。 Executor服务是Java 5引入的一个...
这可能使用了`java.lang.Thread`类或者`java.util.concurrent.ExecutorService`来管理和调度处理客户端请求的线程。 `Readme.txt`文件通常包含关于项目、如何运行程序、注意事项或解释的说明。在这个上下文中,它...
Java中的队列实现有java.util.Queue接口和java.util.concurrent.PriorityQueue类。 5. 树:树是一种非线性数据结构,包含根节点、子节点和父节点的概念。二叉树是最常见的树,包括二叉查找树(Binary Search Tree)...
这可以通过使用`synchronized`关键字、`java.util.concurrent`包中的工具或者`SwingUtilities.invokeLater()`来实现。 6. **设计模式**:在构建这样的应用程序时,可能会用到观察者模式(Observer Pattern),使...
Java提供了`java.util.concurrent`包中的`BlockingQueue`接口及其实现,如`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`,它们是线程安全的数据结构,常用于生产者消费者模式。 死锁、...
### Java练习题知识点详解 #### 1. 冒泡排序法 **知识点**: 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到...
`java.lang.Thread`或`java.util.concurrent`包的工具可以帮助实现并发。 8. **测试与调试**:确保程序正确运行的关键步骤是进行单元测试和集成测试。`JUnit`库提供了方便的测试框架,可以帮助开发者编写测试用例,...
Java 5引入了`java.util.concurrent`包,其中`BlockingQueue`接口和其实现如`ArrayBlockingQueue`、`LinkedBlockingQueue`等提供了更高级的线程间通信方式,它们可以用于生产者-消费者模式或者工作窃取模式。...
8. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的支持,包括线程的创建、同步和协作。 9. **反射**:`java.lang.reflect`包允许程序在运行时检查类、接口、字段和方法的信息,实现...
Java中的java.util.Stack类提供了对栈操作的基本支持。 4. **队列(Queue)**:队列是一种先进先出(FIFO)的数据结构,通常用于任务调度和消息传递。Java提供了多种队列实现,如LinkedList实现的Queue接口,以及...
5. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的工具,如`Runnable`、`ExecutorService`、`Semaphore`等。 6. **异常处理**:`java.lang.Throwable`和其子类如`Exception`、`Error...
为了解决这个问题,Java提供了多种线程同步机制,包括`synchronized`关键字、`volatile`关键字、`java.util.concurrent`包中的工具类等。例如,`synchronized`可以保证同一时间只有一个线程访问特定代码块,防止竞态...
5. **线程处理**:为了实时更新时间,可能使用了Java的多线程技术,如`Thread`类或`java.util.concurrent`包中的工具,以确保时间的动态刷新不会阻塞用户界面。 6. **文档处理**:提供的`.docx`文件可能是项目的...