本帖最后由 Peach2014 于 2014-8-25 17:51 编辑
张孝祥老师7K面试一中的交通信号灯中,Road类中的代码如下- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.TimeUnit;
- public class Road {
- private List<String> vechicles = new ArrayList<String>();
- private String name = null;
- public Road(String name){
- this.name = name;
- ExecutorService pool =Executors.newSingleThreadExecutor();
- //执行一个线程
- pool.execute(new Runnable(){
- public void run(){
- for(int i = 1; i < 1000; i++){
- try {
- Thread.sleep((new Random().nextInt(10) + 1) * 1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- vechicles.add(Road.this.name + "_" + i);
- }
- }
- });
- //启动一个定时器
- ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
- timer.scheduleAtFixedRate(
- new Runnable(){
- public void run(){
- if(vechicles.size() > 0){
- boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
- if(lighted){
- System.out.println(vechicles.remove(0) + " is traversing!");
- }
- }
- }
- },
- 1,
- 1,
- TimeUnit.SECONDS);
- }
- }
复制代码 在构造函数中程序的线程池中的代码没有执行完,为什么定时器中的代码也可以同时执行。
这是一个什么样的机制。构造函数中的代码不应该是从上往下执行的吗?在Sleep的时候后面的代码不是应该会阻塞吗?
不是很理解,求大神指导!
|
|