同步函数和同步代码块的区别:
同步函数使用的锁是固定的this。当线程任务只需要一个同步时用。
同步代码块使用的锁可以是任意对象。当线程任务中需要多个同步时,必须用这个。(较常用)
同步代码块实例:
class Bank{ private int sum; private Object obj = new Object(); void add(int num) { synchronized (obj){ //加锁解决,可换成this。如果是静态类这里就用类名点class。 sum = sum + num; System.out.println(sum + "**" + Thread.currentThread().getName()); } } } class Consumer implements Runnable{ private Bank b = new Bank(); public void run() { for (int i = 0; i < 3; i++) { b.add(100); } } } public class ThreadTest { public static void main(String[] args) { Consumer c = new Consumer(); Thread t1 = new Thread(c); Thread t2 = new Thread(c); t1.start(); t2.start(); } }