多线程在使用system.out.println
时要留一个有意思的地方
public class Main {
public static void main(String[] args) {
Thread thread = new MyThread();
thread.start();
System.out.println("end");
}
}
class MyThread extends Thread {
private int i = 0;
@Override
public void run() {
while (true) {
i++;
System.out.println(i);
}
}
}
主线程另起一个线程,然后在主线程最后打印一个end
,猜猜看结果是什么?end
会不会打印?
主线程一直被Mythread占用
原因就在于system.out.println
是一个同步方法
/**
* Prints an integer and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(int)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>int</code> to be printed.
*/
public void println(int x) {
synchronized (this) {
print(x);
newLine();
}
}