java多线程程序设计二、线程返回值,优先级以及暂停的问题
2013-11-27 00:00
555 查看
1、待返回值的任务的建立需要实现的是Callable接口,实现其call方法,而且这个任务只能通过ExecutorService 的submit方法进行调用,且返回值是一个Future对象,下面看一个例子:
结果如下:
2、我们可以调用sleep方法让线程休眠一会例如:
注意:在此处发生的异常不能够通过跨越线程传达到main方法中,所以我们需要在这里进行必要的捕获和处理。
3、线程的优先级
优先级的设置一般会在run函数里面进行
例如:
package multiThread; import java.util.concurrent.Callable; //带返回值的任务 public class TaskWithResult implements Callable<String> { private int id; public TaskWithResult(int id){ this.id=id; } public String call(){ return "TaskWithResult "+id; } } //test ExecutorService exec=Executors.newCachedThreadPool(); ArrayList<Future<String>> results=new ArrayList<Future<String>>(); for(int i=0;i<10;++i){ results.add(exec.submit(new TaskWithResult(i))); } for (Future<String> future : results) { try { System.out.println(future.get()); } catch (InterruptedException ie) { System.out.println(ie.getMessage()); }finally{ exec.shutdown(); } }
结果如下:
2、我们可以调用sleep方法让线程休眠一会例如:
public void run(){ while(countDown-->0){ System.out.println(status()); //Thread.yield(); try { TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
注意:在此处发生的异常不能够通过跨越线程传达到main方法中,所以我们需要在这里进行必要的捕获和处理。
3、线程的优先级
优先级的设置一般会在run函数里面进行
例如:
package multiThread; public class SimplePriorities implements Runnable { private int countDown=5; private volatile double d;//no optimization private int priority; public SimplePriorities(int priority){ this.priority=priority; } public String toString(){ return Thread.currentThread()+": "+countDown; } public void run(){ Thread.currentThread().setPriority(priority); while(true){ for(int i=1;i<10000;++i){ d+=(Math.PI+Math.E)/(double)i; if(i%1000==0) Thread.yield();//suggest other threads to run } System.out.println(this); if(--countDown==0)return; } } } ExecutorService executorService=Executors.newCachedThreadPool(); for(int i=0;i<5;++i){ executorService.execute(new SimplePriorities(Thread.MIN_PRIORITY)); } executorService.execute(new SimplePriorities(Thread.MAX_PRIORITY)); executorService.shutdown();
相关文章推荐
- 关于java中多线程的问题的一点思考(什么情况下需要考虑到线程,以及线程安全的问题?)
- Java多线程研究06-带返回值的线程定义接口Callable以及Future,FutureTask的使用
- java进程、线程、多线程以及线程安全问题
- 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)
- Java线程优先级和线程暂停恢复的问题
- Java 多线程(三) 线程的生命周期及优先级
- Java多线程系列--“基础篇”10之 线程优先级和守护线程
- Java多线程-新特性-有返回值的线程
- 多线程的join方法和Yield方法以及优先级问题
- 玩转java多线程学习篇三 线程的状态以及Thread类的API
- Java多线程之线程生命周期以及线程各个时期的状态
- java线程研究---(7)Thread同步:多线程数据共用会产生问题
- java线程同步问题以及解决方案
- java 多线程以及线程锁(synchronized )的使用
- java多线程-线程运行状态-获取线程对象以及名称
- java多线程学习之线程安全问题
- java高级多线程编程--关于线程的停止问题
- JAVA多线程的问题以及处理【转】
- java 多线程系列基础篇(十)之线程优先级和守护线程
- Java多线程设计(三)线程安全问题