同步代码块:
public class Test { public static V v = new V(); public static void main(String[] args) { Test t = new Test(); t.fin(); } public void fin() { new Thread(new Runnable() { public void run() { while (true) { v.printString("AAAAAAAAAAAAAAAAAAAAA"); } } }).start(); new Thread(new Runnable() { @Override public void run() { while (true) { v.printString("BBBBBBBBBBBBBBBBBBB"); } } }).start(); } } class V { Object lock = new Object(); public void printString(String s) { synchronized (lock) { //若是不加此锁则会导致字符串的打印异常 for (int i = 0; i < s.length(); i++) { System.out.print(s.charAt(i)); } System.out.println(); } } }
同步方法:
synchronized关键字也可以放到方法上,这样整个方法就是同步的。同步监视器就是类对象本身this。
public synchronized void printString(String s){ for(int i = 0;i<s.length();i++){ System.out.print(s.charAt(i)); } System.out.println(); } }
注意:synchronized关键字可以修饰方法、代码块,但是不能修饰构造方法和属性。