线程间数据传递

 

1
2
3
4
5
6
7
8
9
10
11
12
/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/

  

        在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。

代码实现

数据对象创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Data {
     
    private int value;
 
    public int getValue() {
        return value;
    }
 
    public void setValue(int value) {
        this.value = value;
    }
     
     
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class SubThread extends Thread{
     
      private Data data;
       
      public Data getData() {
        return data;
    }
 
    public void setData(Data data) {
        this.data = data;
    }
 
    public SubThread()
      {
           
      }
       
      public SubThread(Data data)
      {
          this.data=data;         
           
      }
 
      public void run()
      {
         System.out.println("子线程内:"+data.getValue());
          
         this.data.setValue(200); //将值做修改
          
         Test.callback(); //调用回调函数
      }
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Test {
 
    static boolean flag=false;
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        Data data=new Data();
         
        data.setValue(20);
         
        System.out.println("调用子线程前,值为"+data.getValue());
         
        //第一种传值方式 通过构造函数传值
        //SubThread subThread=new SubThread(data);
        SubThread subThread=new SubThread();
        //第二种传值方式 通过属性赋值
        subThread.setData(data);
         
        subThread.start();
         
        //第三种方式 使用回调函数
        while(!flag);
         
        System.out.println("调用子线程后,值为"+data.getValue());
         
         
         
    }
     
    public static void callback()
    {
         flag=true;    
    }
 
}

  

 

编辑

编辑

 

posted @   呆萌老师  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示