Java多线程方案如何处理关键代码

开发 后端
Java多线程方案需要我们不断的注意相关代码的编写,下面我们就看看如何才能更好的进行学习。希望大家在不断的学习中掌握相关知识。

Java多线程方案在不断的完善中已经找到了自己的各种缺点,下面我们就来看看如何才能更好的学习相关问题。希望大家在不断的学习中有所收获,自由在不断的学习中才能更好的进行掌握Java多线程方案。

1、当每个迭代彼此独立,并且完成循环体中每个迭代的工作,意义都足够重大,足以弥补管理一个新任务的开销时,这个顺序循环是适合并行化的。

2、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>extendsConcurrentPuzzleSolver<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多线程操作相关问题总结
  2. 如何理解Java多线程编程的相关问题
  3. Java多线程信号量如何控制相关资源
  4. Java多线程锁如何进行数据同步共享
  5. 带你走进Java多线程编程的神秘世界
责任编辑:张浩 来源: IT168
相关推荐

2010-03-16 11:05:53

Java while循

2024-08-29 08:54:35

2023-02-02 08:56:25

线程池线程submit

2010-03-15 18:11:38

Java多线程

2010-03-16 14:20:57

Java多线程调试

2010-03-15 17:56:23

Java多线程

2015-11-18 18:56:36

Java多线程处理

2017-05-27 20:59:30

Java多线程synchronize

2010-03-16 19:46:14

Java线程函数

2019-08-15 10:20:19

云计算技术安全

2018-06-08 09:12:48

微软

2011-12-15 12:32:19

JavaNIO

2024-09-26 10:51:51

2009-06-29 18:14:23

Java多线程volatile关键字

2010-03-17 18:04:55

java Socket

2015-09-01 11:20:58

程序员糟糕代码

2015-08-31 10:14:30

程序员处理代码糟糕代码

2010-03-17 19:24:38

Java多线程循环

2012-12-12 09:49:41

2017-03-13 13:21:34

Git处理大仓库
点赞
收藏

51CTO技术栈公众号