【发布时间】:2020-11-23 06:58:43
【问题描述】:
我正在尝试使用下面的代码找出多线程的顺序。
当一个线程在同步部分运行时,我使用同步来阻塞其他线程。我原以为线程 1 应该首先开始和结束,然后是线程 2,最后是 3。但结果总是显示 1,3,2
那么为什么会这样呢?不应该像 1 2 3 或 1 3 2 那样随机执行吗?
public class hello {
static class runnablethread extends Thread{
private static int k = 5;
public void run() {
synchronized (runnablethread.class) {
System.out.println(Thread.currentThread().getName() + " start:" + System.currentTimeMillis());
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " end:" + System.currentTimeMillis());
}
}
public static void main(String[] args) {
runnablethread r1 = new runnablethread();
new Thread(r1,"Thread1").start();
new Thread(r1,"Thread2").start();
new Thread(r1,"Thread3").start();
}
}
Thread1 start:1606114065880
Thread1 end:1606114066885
Thread3 start:1606114066885
Thread3 end:1606114067889
Thread2 start:1606114067889
Thread2 end:1606114068894
【问题讨论】:
-
这能回答你的问题吗? Java: Thread sequential order
标签: java multithreading synchronization thread-safety