代码如下:
package java2;
public class TestSynchronized {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Printer p=new Printer();
new Thread() {
public void run() {
while(true) {
p.printer1();
}
}
}.start();
new Thread() {
public void run() {
while(true) {
p.printer2();
}
}
}.start();
}
}
//这样是对的
//class Printer{
// public void printer1() {
// System.out.println("大家好");
// }
//
// public void printer2() {
// System.out.println("你是谁");
// }
//}
//不加同步会出错,因为几个字不是一起的,不是同步,比如可能你输出一个“大”字然后线程就被另一个占领了,就开始输出“你”了。所以我们需要用到同步
class Printer{
public void printer1() {
synchronized (this) {//synchronized (this) 括号里面必须是一样的,需要统一的锁(类)来管理,不然就没有用
System.out.print("大");
System.out.print("家");
System.out.print("好");
System.out.println();
}
}
public void printer2() {
synchronized (this) {
System.out.print("你");
System.out.print("是");
System.out.print("谁");
System.out.println();
}
}
}
运行结果图:
如果把同步代码块取消会出现 你是大家、你大家等等多的达不到符合要求的输出