我在网上看到了下面的例子:
public class TwoThreads {
public static class Thread1 extends Thread {
public void run() {
System.out.println("A");
System.out.println("B");
}
}
public static class Thread2 extends Thread {
public void run() {
System.out.println("1");
System.out.println("2");
}
}
public static void main(String[] args) {
new Thread1().start();
new Thread2().start();
}
}
我的问题是:
保证“A”会在“B”之前打印,“1”会在“2”之前打印,但是“1”是否有可能被另一个线程连续打印两次?在这段代码中,我们至少有 3 个线程(1 个主线程和 2 个创建线程)。我们可以想象调度器运行 1 个线程:new Thread1().start(); 然后在 System.out.println("1"); 之后立即放弃 然后再次在 Thread1().start() 中运行另一个威胁;再次打印“1”?
我正在使用 NetBeans IDE,似乎运行这样的程序总是会导致相同的第一个结果,所以似乎有一些缓存。据我了解,您通过声明 volatile 变量来处理这个问题,可以在这里完成吗,如何?如果不是,那么缓存的解决方案是什么?
在今天的计算机处理器中,我们大多有2个处理器,但我们仍然发现网上很多多线程程序都使用2个以上的线程!这个过程在编译方面不是变得繁重而缓慢吗?