创建线程的方法

1.Thread

2.Runnable+Thread 无返回值
实际上Thread有一个静态内部类Holder,
它有一个Runnable字段成员target,
Thread.start()调用的是target的run方法
而这个target由传递进来的runnable赋值

3.FutureTask+Callable+Thread 有返回值

FutureTask 接收<interface>callable
implements Runnable

Thread(<interface>Runable)

上下文切换
image1

那么重新拿到的时候就要提供执行的偏移量—>程序计数器(记录下一条指令的地址提供给cpu)
image2