亦庄网站开发,wordpress多账号,网络架构要求包括,网站建设策划书5000字我们都知道i分为三步进行#xff0c;分别是1:取到当前i的值#xff0c;2#xff1a;#xff0c;3#xff1a;将最终结果赋值
因此我们可通过创建两个线程#xff0c;对同一个变量count,一个线程对count进行递增操作#xff0c;另一个线程对count进行递减操作。每个线程…我们都知道i分为三步进行分别是1:取到当前i的值23将最终结果赋值
因此我们可通过创建两个线程对同一个变量count,一个线程对count进行递增操作另一个线程对count进行递减操作。每个线程都执行100次操作。
如果count的操作是原子操作那么最终的结果应该是0。但是如果count的操作不是原子操作那么由于两个线程并发执行可能会出现数据竞争a线程在进行操作时任何情况下都会被b线程打断导致最终结果不是0。
代码实现如下所示
package com.wjr.redis;public class AtomicityTest {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(new IncrementTask());Thread t2 new Thread(new DecrementTask());t1.start();t2.start();/*调用join()方法会阻塞当前线程主线程会等待t1和t2线程执行完成后再继续执行*/t1.join();t2.join();System.out.println(Final count value: count);}static class IncrementTask implements Runnable {Overridepublic void run() {for (int i 0; i 100; i) {count;}}}static class DecrementTask implements Runnable {Overridepublic void run() {for (int i 0; i 100; i) {count--;}}}
}我们多次运行会发现count不为0且有好几种不同的结果因此Java中的i并不是原子操作。