用Executor来构建线程池,应该要做的事:
1).调用Executors类中的静态方法newCachedThreadPool(必要时创建新线程,空闲线程会被保留60秒)或newFixedThreadPool(包含固定数量的线程池)等,返回的是一个实现了ExecutorService接口的ThreadPoolExecutor类或者是一个实现了ScheduledExecutorServiece接口的类对象。
2).调用submit提交Runnable或Callable对象。
3).如果想要取消一个任务,或如果提交Callable对象,那就要保存好返回的Future对象。
4).当不再提交任何任务时,调用shutdown方法。
举2个例子如下:
package thread.test04;
import java.util.concurrent.*;
public class ThreadTestA {
public static void main(String[] args) {
ExecutorService e=Executors.newFixedThreadPool(10);
e.execute(new MyRunnableA());
e.execute(new MyRunnableB());
e.shutdown();
}
}
class MyRunnableA implements Runnable{
public void run(){
System.out.println("Runnable:run()....");
int i=0;
while(i<20){
i++;
for(int j=0;j<1000000;j++);
System.out.println("i="+i);
}
}
}
class MyRunnableB implements Runnable{
public void run(){
char c='A'-1;
while(c<'Z'){
c++;
for(int j=0;j<1000000;j++);
System.out.println("c="+c);
}
}
}
////////////////////////////
package thread.test04;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadTestB {
public static void main(String[] args) {
ExecutorService e=Executors.newFixedThreadPool(10);
Future f1=e.submit(new MyCallableA());
Future f2=e.submit(new MyCallableA());
Future f3=e.submit(new MyCallableA());
Future f4=e.submit(new MyCallableA());
Future f5=e.submit(new MyCallableA());
System.out.println("--Future.get()....");
try {
System.out.println(f1.get());
System.out.println(f2.get());
System.out.println(f3.get());
System.out.println(f4.get());
System.out.println(f5.get());
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (ExecutionException e1) {
e1.printStackTrace();
}
e.shutdown();
}
}
class MyCallableA implements Callable<String>{
public String call() throws Exception {
System.out.println("开始执行Callable");
String[] ss={"zhangsan","lisi"};
long[] num=new long[2];
for(int i=0;i<1000000;i++){
num[(int)(Math.random()*2)]++;
}
if(num[0]>num[1]){
return ss[0];
}else if(num[0]<num[1]){
throw new Exception("弃权!");
}else{
return ss[1];
}
}
}
分享到:
相关推荐
在本项目"Java练手_电子时钟"中,我们主要关注的是如何使用Java编程语言来实现一个实时更新的数字时钟。这个练习涉及到多个Java技术领域,包括Java线程、AWT(Abstract Window Toolkit)绘图库以及Swing组件库。下面...
在"jiava 练手练手练手练手练手练手练手"的过程中,你可以针对这些知识点设计小项目或解决实际问题,以此巩固和深化你的Java技能。而文件名"Nora_java"可能代表一个关于Nora的Java编程练习或项目,具体的内容需要...
### Java新手练手实验指导知识点解析 #### 一、熟悉并配置 Java 的运行环境 **实验目的** 1. **掌握安装 J2SE 开发工具的方法:**初学者首先需要了解如何下载并安装 Java 开发工具包 (JDK),通常推荐官方渠道获取...
这个"java相关的练手项目"压缩包很可能是为了帮助Java初学者或开发者提升技能,通过实践来深入理解Java语言的核心概念和技术。下面将详细讨论Java编程中的一些关键知识点,这些内容可能与压缩包中的项目相关。 1. *...
资料中的"练手小项目源码"是实践这些概念的重要部分。 1. **Java基础知识**:学习Java首先需要掌握基础语法,包括变量、数据类型、运算符、控制结构(如if语句和循环)、方法定义以及类和对象的概念。了解如何通过...
【Java练手小项目——多线程聊天室】 在Java编程世界中,多线程是不可或缺的一部分,尤其在开发实时性、交互性强的应用时,如我们的主题“多线程聊天室”。这个实战项目旨在帮助开发者深入理解Java多线程的概念,并...
Java入门级练手小游戏源码合集是一个专为初学者设计的资源包,它包含了多个用Java编程语言编写的简单游戏项目。这个合集对于那些正在学习Java编程并希望实践编程技能的人来说,是一个非常有价值的资源。通过分析这些...
在这个"Java Swing小游戏,纯练手.zip"压缩包中,很显然包含了一个用Java Swing开发的小游戏源代码,适合初学者进行实践和提升技能。 这个项目可能包含以下几个关键知识点: 1. **Java Swing基础知识**:Java ...
"javaSE练手小项目"这个压缩包文件为你提供了宝贵的动手实践机会,旨在帮助你巩固基础知识,为后续的Java Web开发打下坚实基础。以下将详细解释这些小项目可能涵盖的知识点,并提供相关扩展,帮助你深入理解和应用...
四、Java 中守护线程和本地线程的区别 Java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(bool on);true 则把该线程设置为守护...
Java SE学习完成后,自己练手项目十一 这个项目里面多出了:任务栏图标功能实现,和浮动图标的实现(SystemTray 、JWindow) 巩固了线程、序列化等概念,再次使用树形、表格 留心主界面的关闭按钮,我改成隐藏...
5. **多线程**:Java提供了丰富的多线程支持,如Thread类、Runnable接口、synchronized关键字等。通过解决多线程问题,你将学习到如何在并发环境下控制程序执行顺序和共享资源。 6. **I/O流**:Java的IO流用于读写...
Java的Thread类或者java.util.Timer类可以用来实现游戏的主循环,保证游戏以一定的帧率平稳运行。同时,定时器可以用来控制游戏的某些特定行为,比如定时生成敌人或触发特定事件。 游戏的状态管理也很重要。在Java...
本篇文章将详细讲解Java和JavaSE的基础知识点,并结合提供的"Java JavaSE 必练基础案例",帮助你巩固和深化理解。 首先,Java是一种面向对象的编程语言,它的设计目标是“一次编写,到处运行”。这意味着,通过Java...
3. **多线程**:Java的`Thread`类和`Runnable`接口支持并发编程。通过创建和管理线程,可以实现程序的并行执行,提高效率。 4. **异常处理**:Java的`Exception`类和它的子类提供了错误和异常处理机制。通过`try-...
【标题】"FileManager练手,功能不完善"指的是一个由个人开发者编写的Android文件管理器应用,它可能作为初学者的实践项目或是用于学习和研究。这个应用在功能上可能存在一些缺失,因此用户在下载和使用时需要有所...
【描述】:“使用java语言开发的小游戏,注释比较详细,适合初学者练手。” 描述中提到的“注释详细”是Java编程中非常关键的一点。良好的代码注释能够帮助新学习者理解代码的逻辑和功能,提升他们的阅读和分析代码...
【安卓练手小项目合集.zip】是一个包含多个适合初学者和进阶者练习的Android应用开发项目的集合。这个压缩包旨在帮助学习者通过实践来巩固和提升在Android Studio中的编程技能。Android Studio是Google官方推出的...