要模拟并发只能通过睡眠么?
Topic source创建100个线程,问题就出来了....
for (int i = 0; i < 100; i++) {
Thread t2 = new Thread(() -> {
System.out.println("thread start...");
System.out.println("thread end...");
});
t2.start();
}
// t.start();
System.out.println("main end...");
打印结果
...
thread start...
thread start...
thread end...
main end...
thread start...
...
线程多了就乱套了
调用t.start()之后就是并发执行了,
用sleep暂缓一下只是为了让你这个更好看到,并发时程序的执行效果
如果,不使用睡眠 结果感觉 都是正确的
你这说的是个什么玩意,就四条打印语句,怎么就扯上正确错误了?还加锁?共享资源在哪?你往哪加?
哥们,如果你代码没按你的想法跑,这表示你写错了而不是代码跑错了.....你想模拟并发,但实际上多线程的运行就是在很多的时间片上分运行的资源给到每个线程去跑,这个叫时间片轮转.
而在多核处理器的系统中,多个线程可以在不同的处理器核心上同时执行。这就是真正的并行执行。但即使在这种情况下,每个核心仍然会在其上运行的所有线程之间进行切换。
最后线程调度(即操作系统决定哪个线程何时运行)是由操作系统控制的,而且通常是不确定的。
所以你想达到什么样的打印顺序,你就需要加入某些同步机制来完成而不是指望你代码一丢它就自己完成了.
- 1
🌙
要模拟并发执行的效果,我们可以在线程中调用Thread.sleep(),强迫当前线程暂停一段时间:
如果,不使用睡眠 结果感觉 都是正确的
是不是不用加锁呢?