Java多线程循环相关的代码介绍

开发 后端
Java多线程循环如何才能更好的进行相关问题的解决。下面我们就来看看如何才能更好的进行源代码的使用。希望大家有所收获。

Java多线程循环需要我们不断的学习,有很多的问题一直是我们相互关心的。下面我们就来看看如何才能更好的使用这门编程语言。当每个迭代彼此独立,并且完成循环体中每个迭代的工作,意义都足够重大,足以弥补管理一个新任务的开销时,这个顺序循环是适合并行化的。

 

  1. public<T> voidParallelRecursive(final Executorexec,
    List
    <Node<T>>nodes,Collection<T> results){  
  2. for(Node<T> n:nodes){  
  3. exec.execute(new Runnable(){  
  4. public void run(){  
  5. results.add(n.compute());  
  6. }  
  7. });  
  8. parallelRecursive(exec,n.getChildren(),results);  
  9. }  
  10. }  
  11. public<T>Collection<T>getParallelResults(List<Node<T>>nodes)  
  12. throws InterruptedException{  
  13. ExecutorService exec=Executors.newCachedThreadPool();  
  14. Queue<T> resultQueue=newConcurrentLinkedQueue<T>();  
  15. parallelRecursive(exec,nodes,resultQueue);  
  16. exec.shutdown();  
  17. exec.awaitTermination(Long.MAX_VALUE,TimeUnit.SECONDS);  
  18. return reslutQueue;  

 

但是以上程序不能处理不存在任何方案的情况,而下列程序可以解决这个问题

 

  1. public class PuzzleSolver<P,M>extendsConcurrent
    PuzzleSolver
    <P,M>{  
  2. ...  
  3. privatefinal AtomicInteger taskCount=new AtomicInteger(0);  
  4. protectedRunnable newTask(P p,M m,Node<P,M>n){  
  5. return new CountingSolverTask(p,m,n);  
  6. }  
  7. classCountingSolverTask extends SolverTask{  
  8. CountingSolverTask(P pos,Mmove,Node<P,M> prev){  
  9. super(pos,move,prev);  
  10. taskCount.incrementAndGet();  
  11. }  
  12. publicvoid run(){  
  13. try{  
  14. super.run();  
  15. }  
  16. finally{  
  17. if (taskCount.decrementAndGet()==0)  
  18. solution.setValue(null);  
  19. }  
  20. }  
  21. }  

 

以上就是对Java多线程循环的相关介绍。希望大家有所收获。

【编辑推荐】

  1. Java多线程中wait语句的具体使用方法
  2. Java多线程如何防止主线的阻塞
  3. Java多线程中Message类和Queue类的使用方法
  4. Java多线程语句具体分类的详细介绍
  5. Java多线程如何才能协调好生产和消费的关系
责任编辑:张浩 来源: 互联网
相关推荐

2010-03-18 16:19:02

Java自定义线程池

2009-06-11 11:17:59

Java多线程

2010-03-17 17:54:25

java Socket

2011-07-22 14:55:20

多线程

2010-03-16 19:29:26

Java多线程操作

2010-03-16 18:40:59

Java多线程编程

2010-03-15 19:11:39

Java多线程语句

2009-07-03 17:18:34

Servlet多线程

2010-03-19 16:51:53

Java Socket

2009-07-15 18:06:38

Swing线程

2010-03-17 17:30:26

JAVA多线程实现

2010-03-18 15:47:07

Java创建线程

2011-06-22 16:08:40

Qt 多线程 事件循环

2010-03-16 17:52:27

Java多线程信号量

2010-03-10 19:25:04

python多线程

2009-09-01 17:15:42

C#多线程应用

2010-03-17 15:34:09

Java线程同步引用

2010-03-29 17:37:17

Nginx resin

2010-04-08 09:27:44

Oracle 安装脚本

2010-03-16 10:50:21

Java多线程服务器
点赞
收藏

51CTO技术栈公众号