在计算机操作系统中,并发在宏观上是指在同一时间段内,同时有多道程序在运行。 一个程序可以对应一个进程或多个进程,进程有独立的存储空间。一个进程包含一个或多个线程。线程堆空间是共享的,栈空间是私有的。同样,在一个进程中,宏观上有多个线程同时运行。(微观上在单cup系统中,同一时刻,只有一个程序在运行。)

  基于以上原理,线程在并发运行时,对共享数据的操作存在数据同步问题。

1.基本概念

    1.什么样的数据会被存储在线程共享空间堆里?

    对象,当使用new 关键字创建一个对象时,这个对象就被存储在堆里。

    2.并发问题:

  以一个例子来说明:

  创建测试类Test.java,测试类中有一个方法对变量sum加1操作,创建两个线程tA和tB分别执行这段代码:

 1 public class Test {
 2     private int sum = 0;
 3     public void add(){
 4          try {
 5              System.out.println("线程:"+Thread.currentThread().getName()+"执行加1开始,sum当前值为:"+sum);
 6             Thread.sleep(2000);//这两秒代表对其他数据进行操作所耗费的时间
 7             sum++;
 8             System.out.println("线程:"+Thread.currentThread().getName()+"执行加1结束,sum的值为:"+sum);
 9         } catch (InterruptedException e) {
10             // TODO Auto-generated catch block
11             e.printStackTrace();
12         }
13     }
14     public static void main(String [] args){
15         final Test test = new Test();
16         Thread tA = new Thread(new Runnable() {
17             
18             @Override
19             public void run() {
20                 // TODO Auto-generated method stub
21                 test.add();
22             }
23         });
24         Thread tB = new Thread(new Runnable() {
25             
26             @Override
27             public void run() {
28                 // TODO Auto-generated method stub
29                 test.add();
30             }
31         });
32         tA.start();
33         tB.start();
34     }
35 }
View Code

相关文章:

  • 2021-04-30
  • 2021-07-28
  • 2021-08-26
  • 2021-06-16
  • 2021-06-21
猜你喜欢
  • 2021-09-21
  • 2022-12-23
  • 2021-07-25
  • 2021-12-01
  • 2021-10-18
  • 2021-04-08
相关资源
相似解决方案