计算机二级JAVA基础(Java5并发学习)

计算机二级JAVA基础(Java5并发学习),第1张

计算机二级JAVA基础(Java5并发学习),第2张

在Java5之后,并发线程发生了根本性的变化。最重要的是启动、调度和管理线程的新API。在Java5之后,通过Executor启动一个线程比启动线程的start()要好。在新特性中,很容易控制线程的启动、执行和关闭过程,也很容易使用线程池的特性。
首先,创建一个任务
任务是实现Runnable接口的类。
创建时,只需实现run方法即可。
二。执行任务
通过Java . util . concurrent . executorservice接口对象执行任务,该接口对象由工具类Java . util . concurrent . Executors
Executors工厂的静态方法和该包中定义的Executors、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable类的实用方法创建。
ExecutorService提供了一种管理终止的方法和一种生成未来的方法,用于跟踪一个或多个异步任务的执行状态。您可以关闭ExecutorService,这将导致它停止接受新任务。关闭后,执行程序将最终终止。此时,没有正在执行的任务,没有等待执行的任务,也没有可以提交的新任务。
executorservice . execute(new TestRunnable());
1。Create ExecutorService
是由工具类Java . util . concurrent . Executors
Executors工厂的静态方法和这个包中定义的Executors、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable类的实用方法创建的。
比如创建ExecutorService的实例,ExecutorService实际上是一个线程池管理工具:
ExecutorService ExecutorService = executors . newcachethreadpool();
ExecutorService ExecutorService = executors . newfixedthreadpool(3);
ExecutorService ExecutorService = executors . newsinglethreadexecutor();
2。将任务添加到线程以执行
当任务被添加到线程池时,线程池将为每个任务创建一个线程,该线程将在稍后的某个时间自动执行。
三。关闭执行服务对象
executorservice . shut down();
四。综合示例
包并发;
导入Java . util . concurrent . executorservice;
导入Java . util . concurrent . executors;
public class TestCachedThreadPool {
public static void main(String[]args){
//ExecutorService ExecutorService = executors . newcachedthreadpool();
ExecutorService ExecutorService = executors . newfixedthreadpool(5);
//ExecutorService ExecutorService = executors . newsinglethreadexecutor();
for(int I = 0;I < 5;i++){
executorservice . execute(new TestRunnable());
system . out . println(" * * * * * * * * * * * * * * * * a "+I+* * * * * * * * * * * * *);
}
executorservice . shut down();
}
}
类测试runnable实现runnable {
public void run(){
system . out . println(thread . current thread()。getname ()+"线程已被调用。");
while(true){
try {
thread . sleep(5000);
system . out . println(thread . current thread()。getName());
} catch(interrupted exception e){
e . printstacktrace();
}
}
}
]运行结果:
* * * * * * * * * * * * * * A0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
已经调用了pool-1-thread-3线程。
pool-1-thread-1线程已被调用。
* * * * * * * * A3 * * * * * * * * * * * * *
* * * * * * * * * * * * * * A4 * * * * * * * * * * *
已经调用了pool-1-thread-5线程。
池-1线程-2
池-1线程-1
池-1线程-3
池-1线程-5
池-1线程-4
池-1线程-2
池-1线程-1
池-1线程-3
池-1线程-5
池-1线程-4
...v、获取任务执行的返回值

其原理是:在ExecutorService上调用submit(Runnable task,T result)方法,传入任务和返回结果的对象。执行submit方法后,它将返回一个结果对象,即Future对象。
Future表示异步计算的结果。它提供了检查计算是否完成、等待计算完成以及检索计算结果的方法。计算完成后,只能使用get方法检索结果。如有必要,您可以在计算完成之前阻止此方法。取消是由cancel方法执行的。还提供了其他方法来确定任务是正常完成还是取消。计算一旦完成,就不能取消。如果Future用于可取消性,但是没有提供可用的结果,则可以声明Future形式类型,并返回null作为基本任务的结果。
这里有一个例子:
公共类测试runnable 2实现runnable {
public void run(){
system . out . println(thread . current thread()。getname ()+"线程被执行!");
}
}
公共类TestCallable实现Callable {
私有字符串信息;
public test callable(){
}
public test callable(String info){
this . info = info;
}
public void setInfo(String info){
this . info = info;
}
public String getInfo(){
return info;
}
公共字符串调用()抛出异常{
返回“任务执行完成,:"+info;
}
}
导入Java . util . ArrayList;
导入Java . util . list;
import Java . util . concurrent . execution exception;
导入Java . util . concurrent . executorservice;
导入Java . util . concurrent . executors;
导入Java . util . concurrent . future;
/**
*创建者。
*
* @ author exmoda
*/
public class TaskRunResult {
public static void main(String[]args){
ExecutorService ExecutorService = executors . newcachedthreadpool();
List future List = new ArrayList();
for(int I = 0;i < 10++){
future fs = executorservice . submit(new test runnable 2(),new test callable ("task"+(i+1)+"完成!"));
future list . add(fs);
}
for(future fs:future list){
try {
system . out . println("返回值信息:"+fs.get()。getInfo());
} catch(interrupted exception e){
e . printstacktrace();
} catch(execution exception e){
e . printstacktrace();
}
}
executorservice . shut down();
}
}
打印信息:
执行pool-1-thread-2线程!
执行pool-1-thread-5线程!
执行pool-1-thread-4线程!
执行pool-1-thread-1线程!
执行pool-1-thread-3线程!
执行pool-1-thread-4线程!
执行pool-1-thread-1线程!
执行pool-1-thread-5线程!
返回值信息:任务1完成!
执行pool-1-thread-3线程!
返回值信息:任务2完成!
执行pool-1-thread-6线程!
返回值信息:任务3完成!
返回值信息:任务4完成!
返回值信息:任务5完成!
返回值信息:任务6完成!
返回值信息:任务7完成!
返回值信息:任务8完成!
返回值信息:任务9完成!
返回值信息:任务10完成!
进程结束,退出代码为0

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 计算机二级JAVA基础(Java5并发学习)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情