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

简介: java在子线程与主线程传递数据 1.代码中用到的类介绍 C:拥有两个方法分别是设置value和获得value,拥有一个私有变量value。 MyThread:子线程 THread:主线程 2.功能说明 在主线程中对类C的实例c的value进行设置,然后输出c.value 开启子线程,通过构造函数传入C的实例c,在子线程中改变c.value的值 子线程中调用主线程的静态方法

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











目录
相关文章
|
1天前
|
监控 安全 Java
Java中的线程调度与性能优化技巧
Java中的线程调度与性能优化技巧
|
1天前
|
缓存 安全 Java
Java中的线程安全问题及解决方案
Java中的线程安全问题及解决方案
|
1天前
|
并行计算 安全 Java
Java中的多线程与并发编程详解
Java中的多线程与并发编程详解
|
1天前
|
存储 缓存 前端开发
Java八股文面试之多线程篇
Java八股文面试之多线程篇
8 0
Java八股文面试之多线程篇
|
2天前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
3天前
|
Java 调度
Java中的线程池机制详解
Java中的线程池机制详解
|
3天前
|
并行计算 安全 Java
Java中的多线程与并发编程详解
Java中的多线程与并发编程详解
|
1天前
|
Java
java面试之线程八锁
java面试之线程八锁
7 0
|
1天前
|
存储 SQL 安全
Java共享问题 、synchronized 线程安全分析、Monitor、wait/notify以及锁分类
Java共享问题 、synchronized 线程安全分析、Monitor、wait/notify以及锁分类
11 0
|
1天前
|
Java 调度 Windows
Java面试之程序、进程、线程、管程和并发、并行的概念
Java面试之程序、进程、线程、管程和并发、并行的概念
7 0