多线程12___SingleThreadExecutor(单一线程执行器), 可替代 在共享资源上同步

SingleThreadExecutor 就像是线程数量为1的FixedThreadPool (指定数量的线程池).  如果希望在 子线程中连续运行 任何流程(长期存活的任务) ,很有用处.

例如: 监听进入的Socket 连接的任务.


一.  如果向SingleThreadExecutor  提交了多个任务, 那么这些任务将排队,  每个任务都会在下一任务开始前,结束运行.  所有的任务将使用相同的线程.

示例代码:

public class LiftOff implements Runnable {
  protected int countDown = 10; // Default
  private static int taskCount = 0;
  private final int id = taskCount++;
  public LiftOff() {}
  public LiftOff(int countDown) {
    this.countDown = countDown;
  }
  public String status() {
    return "#" + id + "(" +
      (countDown > 0 ? countDown : "Liftoff!") + "), ";
  }
  public void run() {
    while(countDown-- > 0) {
      System.out.print(status());
      Thread.yield();
    }
  }
} 

public class SingleThreadExecutor {    //单一线程执行器
  public static void main(String[] args) {
    ExecutorService exec =
      Executors.newSingleThreadExecutor();
    for(int i = 0; i < 5; i++)
      exec.execute(new LiftOff());
    exec.shutdown();
  }
}

二.用SingleThreadExecutor 来运行这些线程,  以确保任意时刻在任何线程中都只有唯一的任务在运行. 

在这种方式中,不需要在共享资源上处理同步。  有时更好的解决方案是在资源上同步,使用 SingleThreadExecutor  可以省去只是为了维持某些事物的原型而进行的各种协调努力

通过序列化任务, 可以消除对序列化对象的需求.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值