java在子线程与主线程传递数据(回调函数)

本文为博主原创文章,未经博主允许不得转载。     https://blog.csdn.net/feipeng8848/article/details/54135883    
                   
      
               
java在子线程与主线程传递数据
1.代码中用到的类介绍
C:拥有两个方法分别是设置value和获得value,拥有一个私有变量value。
MyThread:子线程
THread:主线程
2.功能说明
在主线程中对类C的实例c的value进行设置,然后输出c.value
开启子线程,通过构造函数传入C的实例c,在子线程中改变c.value的值
子线程中调用主线程的静态方法传递数据给主线程说明子线程执行结束
子线程结束后在主线程中查看c.value

预习知识点:
什么是回调函数?
下面是知乎大神的回答,简直不能再精辟


代码:

package kun.thread;

public class THread 
{
	static C c=new C();
	//flag用来标志子线程执行结束
	static boolean flag=false;
	
	public static void main(String []arg)
	{	
		
		c.setvalue(12);
		System.out.println("子线程执行之前value的值是:"+c.getvalue());	
		System.out.println("执行子线程");	
		
		
		Thread mythread = new MyThread(c);
		mythread.start();
		
		//等待子线程执行结束
		while(!flag);
		System.out.println("子线程执行之后value的值是:"+c.getvalue());	
	}	

	public static void callback()
		{
			System.out.println("子线程执行结束");	
			flag=true;
		}
}


class C
{
	private int value=0;
	public int getvalue()
	{
		return value;
	}
	public void setvalue(int v)
	{
		this.value=v;
	}
}



class MyThread extends Thread
{
	public MyThread(C cc)
	{
		this.cc=cc;
	}
	private C cc;
	@Override
	public void run() 
	{
		cc.setvalue(20);			
		THread.callback();//很像C#的委托和事件
	}
}


思考:很多博文说java只有值传递没有引用传递,可是实践来看上述代码中的 c 就是类似C#通过引用传递给了子线程,子线程和主线程操作的是同一个类实例,c作为参数传递给子线程的时候并没有创建c的副本。不过也有博文说是java对象传递的是对象的地址,因此是值传递,没再去深究,貌似只是说法的问题,有空去看看源码深入了解下。
参考资料:
http://blog.csdn.net/asialyf/article/details/49936309
http://www.cnblogs.com/coderworld/p/java-thread-return-information.html
---------------------
作者:feipeng8848
来源:CSDN
原文:https://blog.csdn.net/feipeng8848/article/details/54135883
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值