Process finished with exit code 0反面教材,不同步的情况,也就是去掉oper(int x)方法的synchronized修饰符,然后运行程序,结果如下:线程A运行结束,增加“20”,当前用户账户余额为:61。
线程D运行结束,增加“-30”,当前用户账户余额为:63。
线程B运行结束,增加“-60”,当前用户账户余额为:3。
线程F运行结束,增加“21”,当前用户账户余额为:61。
线程E运行结束,增加“32”,当前用户账户余额为:93。
线程C运行结束,增加“-80”,当前用户账户余额为:61。
Process finished with exit code 0很显然,上面的结果是错误的,导致错误的原因是多个线程并发访问了竞争资源u,并对u的属性做了改动。可见同步的重要性。注意:通过前文可知,线程退出同步方法时将释放掉方法所属对象的锁,但还应该注意的是,同步方法中还可以使用特定的方法对线程进行调度。这些方法来自于java.lang.Object类,void notify()。