一般将这种线程轮流使用 CPU 的做法称为并发,concurrent(同一时间应对多件事情的能力)
多核CPU下,每个核都可以调度运行线程,这时候线程可以是并行的(同一时间动手做多件事情的能力)
从方法调用的角度,如果
需要等待结果返回,才能继续运行就是同步
不需要等待结果返回,就能继续运行的就是异步
import lombok.extern.slf4j.Slf4j;
@Slf4j(topic = "c.Test1")
public class Test1 {
public static void main(String[] args) {
Thread t = new Thread(){
public void run() {
log.debug("running");
}
};
t.setName("t1");
t.start();
log.debug("running");
}
}
import lombok.extern.slf4j.Slf4j;
@Slf4j(topic = "c.Test2")
public class Test2 {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
log.debug("running");
}
};
Thread t = new Thread(r, "t2");
t.start();
}
}
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
@Slf4j(topic = "c.Test3")
public class Test3 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask task = new FutureTask<>(new Callable() {
@Override
public Integer call() throws Exception {
log.debug("running...");
Thread.sleep(1000);
return 100;
}
});
Thread t1 = new Thread(task, "t3");
t1.start();
log.debug("{}",task.get());
}
}
线程上下文切换
cpu不再执行当前线程,转而执行另一个线程
sleep和yield调用sleep会让当前线程从Running进入Timed Waiting状态
调用yield会让当前线程从Running进入Runnable就绪状态,然后调度执行其他线程



