并发基础(runnable、thread、executor)

并发基础(runnable、thread、executor)

ID:34465237

大小:48.19 KB

页数:7页

时间:2019-03-06

并发基础(runnable、thread、executor)_第1页
并发基础(runnable、thread、executor)_第2页
并发基础(runnable、thread、executor)_第3页
并发基础(runnable、thread、executor)_第4页
并发基础(runnable、thread、executor)_第5页
资源描述:

《并发基础(runnable、thread、executor)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、并发基础(Runnable、Thread、Executor)   与顺序编程不同,并发使程序可以在“同一时间”执行多个操作。   Java对并发编程提供了语言级别的支持。Java通过线程来实现并发程序。一个线程通常实现一个特定的任务,多个线程一起执行的时候就实现了并发。   定义任务的最简单的方式就是实现Runnable接口。1publicinterfaceRunnable{2publicabstractvoidrun();3}   Runable只定义了一个run()方法。   下面是一个监听用户输入的任务。1pub

2、licclassMonitorimplementsRunnable{23@Override4publicvoidrun(){5BufferedReaderreader=newBufferedReader(newInputStreamReader(6System.in));7while(true){8Stringstr;9try{10str=reader.readLine();11if(str.equals("quit")){12return;13}else{14System.out.println(str);15}16

3、}catch(IOExceptione){17e.printStackTrace();18}1920}21}22}   执行一个任务最简单的方式是把它交给一个Thread构造器。1publicclassTest{2publicstaticvoidmain(String[]args){3System.out.println("MainStart");4Threadtask=newThread(newMonitor());5task.start();6System.out.println("MainEnd");7}8}  

4、 执行上面的程序可以看到类似下面这样的结果:      可以看到Main方法一次执行各语句到最后输出“MainEnd”,但Monitor依旧在运行,因为它在另一个线程中。   除了Thread的方式,Java还提供了执行器Executor简化并发编程。   Executor使用execute(Runnablecommand)方法执行一个任务,使用shutdown()方法防止新任务被提交给Executor,当前线程将继续执行shutdown()方法调用之前提交的任务。像这样:1publicstaticvoidmain(S

5、tring[]args){2System.out.println("UseExecutor...");3ExecutorServiceexec=Executors.newCachedThreadPool();4exec.execute(newMonitor());5exec.shutdown();6}   Executor的详细内容见《JavaExecutor框架分析》。    Runnable只是执行一个任务,但是并不能获取任务的执行结果(准确的说应该是run方法是一个void的方法,没有返回值)。如果希望获取任务的

6、执行结果,那么可以选择实现Callable接口。1publicinterfaceCallable{2Vcall()throwsException;3}   它是一个接收泛型,且具有返回内容的“任务接口”。下面是一个通过Callable执行任务并获取返回结果的例子。1publicclassTest{2publicstaticvoidmain(String[]args)throwsInterruptedException,3ExecutionException{4ExecutorServiceexec=Executo

7、rs.newCachedThreadPool();5List>results=newArrayList>();6for(inti=0;i<5;i++){7results.add(exec.submit(newTaskWithResult(i)));8}9exec.shutdown();10for(Futuref:results){11System.out.println(f.get());12}13}14}1516classTaskWithRe

8、sultimplementsCallable{17privateintid;1819publicTaskWithResult(intid){20this.id=id;21}2223@Override24publicStringcall()throwsException{25return"resultofTaskWi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。