使用java.util.concurrent包处理多线程

1、使用拥有固定的线程数的线程池执行线程任务
package com.justin.thread.concurrent;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestThreadPool {
 public static void main(String args[]) throws InterruptedException {
  // only two threads
  ExecutorService exec = Executors.newFixedThreadPool(5);
  for (int index = 0; index < 10; index++) {
   Runnable run = new Runnable() {
    public void run() {
     long time = (long) (Math.random() * 1000);
     System.out.println(Thread.currentThread().getName() + ":Sleeping " + time + "ms");
     try {
      Thread.sleep(time);
     } catch (InterruptedException e) {
     }
    }
   };
   exec.execute(run);
  }
  // must shutdown
  exec.shutdown();
 }
}

2、执行定期任务
public class TestScheduledThread {
 public static void main(String[] args) {
  final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
  final Runnable beeper = new Runnable() {
   int count = 0;
   public void run() {
    System.out.println(new Date() + " beep " + (++count));
   }
  };
  // 1秒钟后运行,并每隔2秒运行一次
  final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, 1, 2, TimeUnit.SECONDS);
  // 2秒钟后运行,并每次在上次任务运行完后等待5秒后重新运行
  final ScheduledFuture<?> beeperHandle2 = scheduler.scheduleWithFixedDelay(beeper, 2, 5, TimeUnit.SECONDS);
  // 30秒后结束关闭任务,并且关闭Scheduler
  scheduler.schedule(new Runnable() {
   public void run() {
    beeperHandle.cancel(true);
    beeperHandle2.cancel(true);
    scheduler.shutdown();
   }
  }, 30, TimeUnit.SECONDS);
 }

}

3、多线程工程以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行(比如有几个旅行团需要途经深圳、广州、韶关、长沙最后到达武汉。旅行团中有自驾游的,有徒步的,有乘坐旅游大巴的;这些旅行团同时出发,并且每到一个目的地,都要等待其他旅行团到达此地后再同时出发,直到都到达终点站武汉)
package com.justin.thread.concurrent;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestCyclicBarrier {
 // 徒步需要的时间: Shenzhen, Guangzhou, Shaoguan, Changsha, Wuhan
 private static int[] timeWalk = {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值