精华内容
下载资源
问答
  • java并行执行多任务:最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。import java.util.UUID;import java.util....

    java并行执行多个任务:

    最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。

    import java.util.UUID;

    import java.util.concurrent.CountDownLatch;

    import java.util.concurrent.ExecutorService;

    import java.util.concurrent.Executors;

    /**

    * 测试监控类

    *

    * @author

    *

    */

    public class WatchThread {

    private String name = UUID.randomUUID().toString();

    /**

    * 测试函数

    *

    * @throws InterruptedException

    */

    public void testThread() throws InterruptedException {

    int threadNum = 10;

    // 初始化countDown

    CountDownLatch threadSignal = new CountDownLatch(threadNum);

    // 创建固定长度的线程池

    //Executor executor = Executors.newFixedThreadPool(threadNum);

    //此处不可以用接口 需要使用Executor的实现类 ExecutorService Executor未提供shutdown等方法

    ExecutorService executor = Executors.newFixedThreadPool(threadNum);

    for (int i = 0; i < threadNum; i++) { // 开threadNum个线程

    Runnable task = new TestThread(threadSignal);

    // 执行

    executor.execute(task);

    }

    threadSignal.await(); // 等待所有子线程执行完

    //固定线程池执行完成后 将释放掉资源 退出主进程

    executor.shutdown();//并不是终止线程的运行,而是禁止在这个Executor中添加新的任务

    // do work end

    //退出主进程

    System.out.println(Thread.currentThread().getName() + "+++++++结束.");

    }

    /**

    * 测试函数

    */

    public static void main(String[] args) throws InterruptedException {

    WatchThread test = new WatchThread();

    test.testThread();

    }

    /**

    *

    * @author wangmuming

    * 此可以做完内部类 也可以不做未内部类

    * 作为内部类的时候 有一个好处 就是可以直接引用给类的主对象的成员变量 如此处的name

    * 当然

    */

    private class TestThread implements Runnable {

    private CountDownLatch threadsSignal;

    public TestThread(CountDownLatch threadsSignal) {

    this.threadsSignal = threadsSignal;

    }

    public void run() {

    System.out.println(Thread.currentThread().getName() + "开始..." + name);

    System.out.println("开始了线程::::" + threadsSignal.getCount());

    // do shomething

    //核心处理逻辑

    //用到成员变量name作为参数

    // 线程结束时计数器减1

    threadsSignal.countDown();//必须等核心处理逻辑处理完成后才可以减1

    System.out.println(Thread.currentThread().getName() + "结束. 还有"

    + threadsSignal.getCount() + " 个线程");

    }

    }

    }

    执行结果:

    pool-1-thread-1开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::10

    pool-1-thread-1结束. 还有9 个线程

    pool-1-thread-2开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::9

    pool-1-thread-2结束. 还有8 个线程

    pool-1-thread-3开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::8

    pool-1-thread-3结束. 还有7 个线程

    pool-1-thread-4开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    pool-1-thread-5开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::7

    开始了线程::::7

    pool-1-thread-4结束. 还有6 个线程

    pool-1-thread-5结束. 还有5 个线程

    pool-1-thread-10开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::5

    pool-1-thread-6开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    pool-1-thread-9开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::4

    pool-1-thread-9结束. 还有3 个线程

    pool-1-thread-8开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::3

    pool-1-thread-8结束. 还有2 个线程

    pool-1-thread-7开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::2

    pool-1-thread-7结束. 还有1 个线程

    开始了线程::::4

    pool-1-thread-10结束. 还有4 个线程

    pool-1-thread-6结束. 还有0 个线程

    main+++++++结束.

    展开全文
  • import java.util.UUID;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*** 测试监控类** @author**/public class WatchThread ...

    import java.util.UUID;

    import java.util.concurrent.CountDownLatch;

    import java.util.concurrent.ExecutorService;

    import java.util.concurrent.Executors;

    /**

    * 测试监控类

    *

    * @author

    *

    */

    public class WatchThread {

    private String name = UUID.randomUUID().toString();

    /**

    * 测试函数

    *

    * @throws InterruptedException

    */

    public void testThread() throws InterruptedException {

    int threadNum = 10;

    // 初始化countDown

    CountDownLatch threadSignal = new CountDownLatch(threadNum);

    // 创建固定长度的线程池

    //Executor executor = Executors.newFixedThreadPool(threadNum);

    //此处不可以用接口 需要使用Executor的实现类 ExecutorService Executor未提供shutdown等方法

    ExecutorService executor = Executors.newFixedThreadPool(threadNum);

    for (int i = 0; i < threadNum; i++) { // 开threadNum个线程

    Runnable task = new TestThread(threadSignal);

    // 执行

    executor.execute(task);

    }

    threadSignal.await(); // 等待所有子线程执行完

    //固定线程池执行完成后 将释放掉资源 退出主进程

    executor.shutdown();//并不是终止线程的运行,而是禁止在这个Executor中添加新的任务

    // do work end

    //退出主进程

    System.out.println(Thread.currentThread().getName() + "+++++++结束.");

    }

    /**

    * 测试函数

    */

    public static void main(String[] args) throws InterruptedException {

    WatchThread test = new WatchThread();

    test.testThread();

    }

    /**

    *

    * @author wangmuming

    * 此可以做完内部类 也可以不做未内部类

    * 作为内部类的时候 有一个好处 就是可以直接引用给类的主对象的成员变量 如此处的name

    * 当然

    */

    private class TestThread implements Runnable {

    private CountDownLatch threadsSignal;

    public TestThread(CountDownLatch threadsSignal) {

    this.threadsSignal = threadsSignal;

    }

    public void run() {

    System.out.println(Thread.currentThread().getName() + "开始..." + name);

    System.out.println("开始了线程::::" + threadsSignal.getCount());

    // do shomething

    //核心处理逻辑

    //用到成员变量name作为参数

    // 线程结束时计数器减1

    threadsSignal.countDown();//必须等核心处理逻辑处理完成后才可以减1

    System.out.println(Thread.currentThread().getName() + "结束. 还有"

    + threadsSignal.getCount() + " 个线程");

    }

    }

    }

    执行结果:

    pool-1-thread-1开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::10

    pool-1-thread-1结束. 还有9 个线程

    pool-1-thread-2开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::9

    pool-1-thread-2结束. 还有8 个线程

    pool-1-thread-3开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::8

    pool-1-thread-3结束. 还有7 个线程

    pool-1-thread-4开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    pool-1-thread-5开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::7

    开始了线程::::7

    pool-1-thread-4结束. 还有6 个线程

    pool-1-thread-5结束. 还有5 个线程

    pool-1-thread-10开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::5

    pool-1-thread-6开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    pool-1-thread-9开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::4

    pool-1-thread-9结束. 还有3 个线程

    pool-1-thread-8开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::3

    pool-1-thread-8结束. 还有2 个线程

    pool-1-thread-7开始...aaa917dc-bd69-4438-9bb1-0051e5c62984

    开始了线程::::2

    pool-1-thread-7结束. 还有1 个线程

    开始了线程::::4

    pool-1-thread-10结束. 还有4 个线程

    pool-1-thread-6结束. 还有0 个线程

    main+++++++结束.

    展开全文
  • java并行执行多任务

    万次阅读 2014-02-24 17:26:52
    java并行执行多任务: 最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。 import java.util.UUID; import java....

    java并行执行多个任务:

    最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。


     
    import java.util.UUID;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * 测试监控类
     * 
     * @author
     * 
     */
    public class WatchThread {
    	
    	private String name = UUID.randomUUID().toString();
    
    	/**
    	 * 测试函数
    	 * 
    	 * @throws InterruptedException
    	 */
    	public void testThread() throws InterruptedException {
    		int threadNum = 10;
    		// 初始化countDown
    		CountDownLatch threadSignal = new CountDownLatch(threadNum);
    		// 创建固定长度的线程池
    //		Executor executor = Executors.newFixedThreadPool(threadNum);
    		//此处不可以用接口 需要使用Executor的实现类 ExecutorService  Executor未提供shutdown等方法
    		ExecutorService executor = Executors.newFixedThreadPool(threadNum);
    		for (int i = 0; i < threadNum; i++) { // 开threadNum个线程
    			Runnable task = new TestThread(threadSignal);
    			// 执行
    			executor.execute(task);
    			
    		}
    		threadSignal.await(); // 等待所有子线程执行完
    		//固定线程池执行完成后 将释放掉资源 退出主进程
    		executor.shutdown();//并不是终止线程的运行,而是禁止在这个Executor中添加新的任务
    		// do work end
    		//退出主进程
    		System.out.println(Thread.currentThread().getName() + "+++++++结束.");
    	}
    
    	/**
    	 * 测试函数
    	 */
    	public static void main(String[] args) throws InterruptedException {
    		WatchThread test = new WatchThread();
    		test.testThread();
    	}
    
    	/**
    	 * 
    	 * @author wangmuming
    	 * 此可以做完内部类 也可以不做未内部类
    	 * 作为内部类的时候 有一个好处 就是可以直接引用给类的主对象的成员变量 如此处的name
    	 * 当然
    	 */
    	private class TestThread implements Runnable {
    		private CountDownLatch threadsSignal;
    
    		public TestThread(CountDownLatch threadsSignal) {
    			this.threadsSignal = threadsSignal;
    		}
    		
    
    		public void run() {
    			System.out.println(Thread.currentThread().getName() + "开始..." + name);
    			System.out.println("开始了线程::::" + threadsSignal.getCount());
    			
    			// do shomething
    		
    			//核心处理逻辑
    			
    		//	用到成员变量name作为参数
    			
    			// 线程结束时计数器减1
    			threadsSignal.countDown();//必须等核心处理逻辑处理完成后才可以减1
    			System.out.println(Thread.currentThread().getName() + "结束. 还有"
    					+ threadsSignal.getCount() + " 个线程");
    		}
    	}
    
    }

    
    

    
    

    执行结果:


    pool-1-thread-1开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::10
    pool-1-thread-1结束. 还有9 个线程
    pool-1-thread-2开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::9
    pool-1-thread-2结束. 还有8 个线程
    pool-1-thread-3开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::8
    pool-1-thread-3结束. 还有7 个线程
    pool-1-thread-4开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    pool-1-thread-5开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::7
    开始了线程::::7
    pool-1-thread-4结束. 还有6 个线程
    pool-1-thread-5结束. 还有5 个线程
    pool-1-thread-10开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::5
    pool-1-thread-6开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    pool-1-thread-9开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::4
    pool-1-thread-9结束. 还有3 个线程
    pool-1-thread-8开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::3
    pool-1-thread-8结束. 还有2 个线程
    pool-1-thread-7开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
    开始了线程::::2
    pool-1-thread-7结束. 还有1 个线程
    开始了线程::::4
    pool-1-thread-10结束. 还有4 个线程
    pool-1-thread-6结束. 还有0 个线程
    main+++++++结束.

    展开全文
  • java并行执行任务demo

    千次阅读 2018-02-01 16:30:38
    在一个方法中同时调用个方法或者服务,并等待所有结果返回 package com.test.demo; import org.junit.Test; import java.util.concurrent.CompletableFuture; public class TestFuture { @Test public ...

    在一个方法中同时调用多个方法或者服务,并等待所有结果返回

    package com.test.demo;
    
    import org.junit.Test;
    
    import java.util.concurrent.CompletableFuture;
    
    public class TestFuture {
    
        @Test
        public void testA(){
    
            CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> c());
            CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> a());
            CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> b());
    
    
            try {
                //获取并行执行任务结果
                System.out.println(future3.get());
                System.out.println(future1.get());
                System.out.println(future2.get());
            }catch (Exception e){
    
            }
    
        }
    
        public String a(){
            try {
                Thread.sleep(1000);
            }catch (Exception e){
    
            }
            return "a";
        }
    
        private String b(){
            try {
                //模拟业务执行时间
                Thread.sleep(2000);
            }catch (Exception e){
    
            }
            return "b";
        }
        private String c(){
            try {
                //模拟业务执行时间
                Thread.sleep(5000);
            }catch (Exception e){
    
            }
            return "c";
        }
    }
     


    测试结果:


    从执行结果中可以看到一共耗时5s,如果同步进行执行,耗时应该在8s


    一个并行和并发的解释地址:https://my.oschina.net/roccn/blog/1377584

    展开全文
  • 另外执行此段 代码后,我的cpu 2600x 6核12线程 直接拉满到100%,16g的内存也占到了70-80%,大概运行快一个小时,才把20G左右的视频转换完成 import java.io.File; import java.io.IOException; import java.util...
  • 个人给这样的子线程任务取了个名字叫并行任务。对于这种任务,每次去编写代码加锁控制时序,觉得太麻烦,正好朋友提到CountDownLatch这个类,于是用它来编写了个小工具。首先,要处理的是任务,于是定义了一个...
  • Java多任务并行执行(带前置任务)

    千次阅读 2017-06-13 10:49:00
    出现需求在登录时,需要向服务器个接口请求程序所需数据。有些任务B必须等待任务A请求数据返回后在请求。
  • Phaser 类是 JUC 包下的并发控制类,适用于多线程分阶段有序的并行执行任务的场景,类似于CountDownLatch、CyclicBarrier 的功能,但是 Phaser 类更加灵活和方便。本篇文章的目的是通俗易懂的讲解 Phaser 的概念以及...
  • Java进阶7并行优化JDK多任务执行框架技术20131114 Java语言本身就是支持多线程机制的,他提供了Thread类Runnable接口等简单的多线程支持工具,同时为了进一步改善并发程序的性能,在JDK中还提供了用于多线程管理的...
  • 理论上,Java线程在CPU(或者内核)情况下,应该是并行处理的,即将个线程均匀分布到个CPU上去执行,这样的话,理论上做"任务"只需要花"做一个任务"的时间。那么实际情况怎样呢?下图是我的电脑配置...
  • Application DevelopmentManaging Execution并行执行并行执行本节描述了如何在Flink中配置程序的并行执行。一个Flink程序由任务组成(变换/操作符, 数据源和 sinks)。一个任务被切分为个并行的实例来执行,而每...
  • Java并行编程–从并行任务集获取反馈

    千次阅读 多人点赞 2012-04-01 12:53:24
    Java并行编程–从并行任务集获取反馈在并行任务启动后,强制性地从并行任务得到反馈。假想有一个程序,可以发送批邮件,还使用了线程机制。你想知道有多少邮件成功发送吗?你想知道在实际发送过程期间,这个批处理...
  • 并行Semi-Join性能提升对于选择Semi-Join策略的查询,PolarDB对Semi-Join所有策略实现了并行加速,通过拆分Semi-Join的任务线程模型并行运行任务集,强化去重能力,使查询性能得到了显著的提升,以Q20为例。...
  • 关于Java多线程是否并行执行的问题

    千次阅读 2019-08-20 11:13:32
    理论上,Java线程在CPU(或者内核)情况下,应该是并行处理的,即将个线程均匀分布到个CPU上去执行,这样的话,理论上做"任务"只需要花"做一个任务"的时间。 那么实际情况怎样呢? 下图是我的电脑...
  • 认识多任务、多进程、单线程、多线程要认识多线程就要从操作系统的原理说起。现在的操作系统都是多任务操作系统,每个运行的任务就是操作系统所做的一件事情,比如你在听歌的同时还在用MSN和好友聊天。听歌和聊天...
  • Java使用Fork/Join框架来并行执行任务

    千次阅读 2019-01-03 17:12:35
    现代的计算机已经向CPU方向发展,即使是普通的PC,甚至现在的智能手机、多核处理器已被广泛应用。在未来,处理器的核心数将会发展的越来越。 虽然硬件上的多核CPU已经十分成熟,但是很应用程序并未这种多核...
  • 文章目录Fork-Join原理任务类型CPU密集型(CPU-bound)IO密集型(I/O bound)CPU密集型 vs IO密集型Fork-Join...CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很,此时,系统运作大部分的状况是
  • 由于进程的线程可以在个内核上并行执行,因此多核处理器为并发编程打开了一扇扇新的大门。为实现应用程序的最大性能,一项重要的技术就是将密集型任务拆分成可以并行执行的若干小块,以便最大程度利用计算能力。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,238
精华内容 895
关键字:

java并行执行多任务

java 订阅