博客之星:我去,你竟然还不会用 synchronized
发布日期:2021-04-30 21:11:09 浏览次数:102 分类:精选文章

本文共 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());}

    ?????????????

    1. ?? static ???
    2. 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);    }}

      ????????

      1. ??????
      2. 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 ?????????????????????????????????????????????????

        ?????????????????????????????????????????????????????? ????????????????

    上一篇:我是软件测试程序员,不是那个修电脑的
    下一篇:一招教你如何在简历上突出工作经验!(干货)

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2026年06月14日 09时07分29秒