资讯专栏INFORMATION COLUMN

java并发编程学习之cas-AtomicInteger(二)

warmcheng / 3020人阅读

摘要:示例运行结果如下在多线程无锁的情况下,总是小于等于,而因为原子性的方法总是等于。

示例
public class AtomicDemo {
    static int num1 = 0;
    static AtomicInteger num2 = new AtomicInteger(0);

    static class Thread1 extends Thread {
        @Override
        public void run() {
            try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            num1++;
        }
    }

    static class Thread2 extends Thread {
        @Override
        public void run() {
            try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            num2.incrementAndGet();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 1000; i++) {
            new Thread1().start();
            new Thread2().start();
        }
        Thread.sleep(2000);
        System.out.println("num1=" + num1);
        System.out.println("num2=" + num2.get());
    }
}

运行结果如下:

在多线程无锁的情况下,num1总是小于等于1000,而num2因为原子性的方法总是等于1000。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75350.html

相关文章

  • java并发编程习之线程池-AbstractExecutorService()

    摘要:抽象类,实现了的接口。将任务封装成提交任务主要方法在任务是否超时超时时间任务书用于存放结果的,先完成的放前面。 AbstractExecutorService抽象类,实现了ExecutorService的接口。 newTaskFor 将任务封装成FutureTask protected RunnableFuture newTaskFor(Runnable runnable, T va...

    Jokcy 评论0 收藏0
  • java并发编程习之Fork/Join 框架-RecursiveTask()

    摘要:示例计算一组数据,设置阈值为,也就是说每次计算的数量不超过个。总数总数运行结果如下可以看出,两次结果是一样的。创建继承的类,实现方法,这里主要是计算以及拆分任务合并结果。 示例 计算一组数据,设置阈值为50,也就是说每次计算的数量不超过50个。 public class RecursiveTaskDemo extends RecursiveTask { private stat...

    TerryCai 评论0 收藏0
  • java并发编程习之线程的生命周期-start(

    摘要:与执行方法,是用来启动线程的,此时线程处于就绪状态,获得调度后运行方法。执行方法,相对于普通方法调用,在主线程调用。程序是顺序执行的,执行完才会执行下面的程序。 start与run 执行start方法,是用来启动线程的,此时线程处于就绪状态,获得调度后运行run方法。run方法执行结束,线程就结束。 执行run方法,相对于普通方法调用,在主线程调用。程序是顺序执行的,执行完才会执行下...

    bigdevil_s 评论0 收藏0
  • java并发编程习之synchronize(一)

    摘要:线程安全问题在并发编程学习之基础概念提到,多线程的劣势之一,有个线程安全问题,现在看看下面的例子。那么,该怎么解决呢,很简单,在方法前加个同步锁。运行结果如下有两种情况,是因为看谁先抢占锁,但是输出的算法结果是正确的。 线程安全问题 在java并发编程学习之基础概念提到,多线程的劣势之一,有个线程安全问题,现在看看下面的例子。 public class NotSafeDemo { ...

    Elle 评论0 收藏0
  • java并发编程习之synchronize(

    摘要:的应用方式代码块作用范围在中,作用对象是调用这个代码块的对象。方法进来了出来了运行的结果如下等把方法执行完,释放了的锁,才开始执行。静态方法运行的结果如下等待执行完才执行,说明是类锁类所的另外一种形式运行结果如下 synchronized的应用方式 代码块:作用范围在{}中,作用对象是调用这个代码块的对象。 方法:作用范围是一个方法,作用对象是调用这个方法的对象。 静态方法:作用范围...

    darkbaby123 评论0 收藏0

发表评论

0条评论

warmcheng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<