java trick--system.out.println

多线程在使用 system.out.println 时要留一个有意思的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 是一个同步方法

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 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();
}
}
作者

徐靖峰

发布于

2016-11-07

更新于

2021-04-07

许可协议


Kirito的技术分享
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×