Java多线程进一步理解之----------线程共享数据

Bertha 。 2022-05-17 04:22 310阅读 0赞

说起线程共享数据有几种方式,

1.使用公共集合类来实现,代码很简单就不多解释:

  1. public class TestThreadShareData {
  2. private static int data = 0;
  3. private static Map<Thread,Integer> map = new HashMap<Thread,Integer>();
  4. public static void main(String[] args) {
  5. for (int i = 0; i < 2; i++) {
  6. new Thread(new Runnable() {
  7. @Override
  8. public void run() {
  9. data = new Random().nextInt();
  10. map.put(Thread.currentThread(), data);
  11. System.out.println("main" + Thread.currentThread().getName() + "data=" + data);
  12. new A().get();
  13. new B().get();
  14. }
  15. }).start();
  16. }
  17. }
  18. static class A {
  19. public void get() {
  20. data = map.get(Thread.currentThread());
  21. System.out.println("A from main"+Thread.currentThread().getName() + "data = "+data);
  22. }
  23. }
  24. static class B {
  25. public void get() {
  26. data = map.get(Thread.currentThread());
  27. System.out.println("B from main"+Thread.currentThread().getName() + "data = "+data);
  28. }
  29. }
  30. }

2.使用互斥的访问机制

  1. public class doThreadShareData {
  2. //java.util.concurrent
  3. public static void main(String[] args) {
  4. ShareData shareData =new ShareData();
  5. new Thread(new Runnable() {
  6. @Override
  7. public void run() {
  8. shareData.deccreament();
  9. }
  10. }).start();
  11. new Thread(new Runnable() {
  12. @Override
  13. public void run() {
  14. shareData.increment();
  15. }
  16. }).start();
  17. }
  18. }
  19. class ShareData {
  20. private int j = 0;
  21. public synchronized void increment(){
  22. j++;
  23. }
  24. public synchronized void deccreament(){
  25. j--;
  26. }
  27. }

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java线通信:共享数据问题

    Java多线程通信中,共享数据问题主要涉及到线程安全和数据一致性的问题。当多个线程访问和修改同一个数据时,如果没有适当的同步机制,就可能出现数据不一致、竞态条件等问题。以下是一

    相关 Rust线数据共享

    1. 怎么创建线程 我们都知道Java中通过实现Runnable接口或继承Thread类,来完成一个线程的创建,那么在Rust中是如何实现一个线程的呢?代码如下。