本文共 3145 字,大约阅读时间需要 10 分钟。
synchronized ?????????
?????????????????????????? Jason ?????????????????????????????????
?????? review ?????????????????? synchronized ????????????????????????????????????????????????? synchronized ?????????????????????????????????
????????
?????????????????????????????????????????????????????
public class SynchronizedMethod { private int sum; public int getSum() { return sum; } public void setSum(int sum) { this.sum = sum; } public void calculate() { setSum(getSum() + 1); }} ???????????????????????????
class SynchronizedMethodTest { @Test void calculate() throws InterruptedException { ExecutorService service = Executors.newFixedThreadPool(3); SynchronizedMethod summation = new SynchronizedMethod(); IntStream.range(0, 1000) .forEach(count -> service.submit(summation::calculate)); service.awaitTermination(1000, TimeUnit.MILLISECONDS); assertEquals(1000, summation.getSum()); }} ???????????? 976????? 1000?? 24?????????????????????????????????
synchronized ???????
????????synchronized ????????????????????? synchronized ????????
public synchronized void synchronizedCalculate() { setSum(getSum() + 1);} ???????? synchronized ???????????????????????????????????
@Testvoid synchronizedCalculate() throws InterruptedException { ExecutorService service = Executors.newFixedThreadPool(3); SynchronizedMethod summation = new SynchronizedMethod(); IntStream.range(0, 1000) .forEach(count -> service.submit(summation::synchronizedCalculate)); service.awaitTermination(1000, TimeUnit.MILLISECONDS); assertEquals(1000, summation.getSum());} ?????????????
- ?? static ???
- ??????
public class SynchronizedStaticMethod { public static int sum; public synchronized static void synchronizedCalculate() { sum = sum + 1; }} ??????????????????????????
class SynchronizedStaticMethodTest { @Test void synchronizedCalculate() throws InterruptedException { ExecutorService service = Executors.newFixedThreadPool(3); IntStream.range(0, 1000) .forEach(count -> service.submit(SynchronizedStaticMethod::synchronizedCalculate)); service.awaitTermination(1000, TimeUnit.MILLISECONDS); assertEquals(1000, SynchronizedStaticMethod.sum); }} ????????
public void synchronisedThis() { synchronized (this) { setSum(getSum() + 1); }} ?????????????????? synchronized ?????????????
public static void synchronisedThis() { synchronized (SynchronizedStaticMethod.class) { sum = sum + 1; }} ???????
@Testvoid synchronisedThis() throws InterruptedException { ExecutorService service = Executors.newFixedThreadPool(3); SynchronizedMethod summation = new SynchronizedMethod(); IntStream.range(0, 1000) .forEach(count -> service.submit(summation::synchronisedThis)); service.awaitTermination(1000, TimeUnit.MILLISECONDS); assertEquals(1000, summation.getSum());} ??
?????????????????? synchronized ?????????????????????????????????????????????????
?????????????????????????????????????????????????????? ????????????????
发表评论
最新留言
关于作者