美文网首页
Java中一个对象在多线程中是共享的

Java中一个对象在多线程中是共享的

作者: 与猎犬赛跑的野兔 | 来源:发表于2018-06-07 16:31 被阅读0次
public class begin {
  public static void main(String[] arg) {
    Data data = new Data(0);
    new Thread(() -> {
      for (int i = 0; i < 10; i++) {
        data.path = data.path + "+";
        System.out.println("increment, value = " + String.valueOf(data.increment()) + ", " + data.path);
      }
    }).start();

    new Thread(() -> {
      for (int i = 0; i < 10; i++) {
        data.path = data.path + "-";
        System.out.println("decrement, value = " + String.valueOf(data.decrement()) + ", " + data.path);
      }
    }).start();
  }

  static class Data {
    int value;
    String path;

    Data(int i) {
      value = i;
      path = "";
    }

    int increment() {
      return ++value;
    }

    int decrement() {
      return --value;
    }
  }
}

输出打印:

increment, value = 1, +
increment, value = 2, ++
increment, value = 3, +++
decrement, value = 2, +++-
decrement, value = 2, +++-+-
increment, value = 3, +++-+
increment, value = 2, +++-+--+
increment, value = 3, +++-+--++
increment, value = 4, +++-+--+++
increment, value = 5, +++-+--++++
increment, value = 6, +++-+--+++++
increment, value = 7, +++-+--++++++
decrement, value = 1, +++-+--
decrement, value = 6, +++-+--++++++-
decrement, value = 5, +++-+--++++++--
decrement, value = 4, +++-+--++++++---
decrement, value = 3, +++-+--++++++----
decrement, value = 2, +++-+--++++++-----
decrement, value = 1, +++-+--++++++------
decrement, value = 0, +++-+--++++++-------

注意:输出的日志可以看出,执行加操作的线程后,会在某一时刻执行减操作,而且多线程中“打印”这个行为也是有可能滞后的,如第二次 value = 2之后,先执行加再减,但是输出的是把执行减的操作打印出来后再打印加的操作结果,所以,对于多线程中的数据操作是会引发并发冲突的,

相关文章

  • Java中一个对象在多线程中是共享的

    输出打印: 注意:输出的日志可以看出,执行加操作的线程后,会在某一时刻执行减操作,而且多线程中“打印”这个行为也是...

  • 带你搞懂Java多线程(三)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二) 什么是线程间的共享 Java支持多个线程同时访问一个对象...

  • 第35节:Java面向对象中的多线程

    Java面向对象中的多线程 多线程 在Java面向对象中的多线程中,要理解多线程的知识点,首先要掌握什么是进程,什...

  • go并发编程之美(一)

    一、前言 在Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go中的通道是go中...

  • JVM系列之:对象的锁状态和同步

    简介 锁和同步是java多线程编程中非常常见的使用场景。为了锁定多线程共享的对象,Java需要提供一定的机制来实现...

  • JVM系列之:对象的锁状态和同步

    简介 锁和同步是java多线程编程中非常常见的使用场景。为了锁定多线程共享的对象,Java需要提供一定的机制来实现...

  • 多线程笔记1-线程的共享与协作

    什么是多线程的共享? 什么是多线程之间的协作? 多线程的共享:是指多个线程访问同一个对象。 多线程的协作是指:当A...

  • Java并发实践

    Java Concurrency 在多线程环境下,为了保证共享数据的原子和内存可见性,需要进行锁操作。在JAVA中...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • 并发编程之对象锁 — synchronized

    并发的前提:多线程操作共享变量 对象锁,字如其名,就是给java对象加的锁,包括new出来的实例对象以及class...

网友评论

      本文标题:Java中一个对象在多线程中是共享的

      本文链接:https://www.haomeiwen.com/subject/kyigsftx.html