首页 > 编程 > Java > 正文

Java回调机制的多线程实现

2019-11-08 03:23:10
字体:
来源:转载
供稿:网友

   回调机制作为java学习甚至是语言学习中一种很重要的思想,用处十分广泛,在Android的开发中有大量的回调实现,为了使回调更加明显,我们使用多线程来实现一个简单的回调机制,程序的逻辑如下:首先通知Test1来计算1+....+100=? Test1新建了一个Tools线程去计算这个事情而自己在打印“...",当Tools计算好这个结果之后通知Test1设置好的回调函数来打印结果程序如下:
public class Test1 implements Runnable {	PRivate Boolean flag = true;	private int n = 0;	public Test1(int n) {		// TODO Auto-generated constructor stub		this.n = n;	}	public void sum() {		// 2.sum()被run调用,通知Tools计算,并将自己作为参数传递进去(为方便传递n值和回调函数本身)		new Thread(new Tools(this)).start();		//  3.自己开始打印" . "		System.out.print("正在计算");		while (flag) {			System.out.print(".");			try {				Thread.sleep(400);			} catch (InterruptedException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}		}		// System.out.println("计算结束");	}	public void Objects2(int sum) {		// TODO Auto-generated method stub		//  4受到通知 打印计算结果 并将flag设置为false 结束sum();		System.out.println();		System.out.println(sum);		this.flag = false;	}	@Override	public void run() {		// TODO Auto-generated method stub		sum();  1.程序一开始运行的地方	}	public int getN() {		// TODO Auto-generated method stub		return n;	}}class Tools implements Runnable {	private Test1 test;	public Tools(Test1 test) {		// TODO Auto-generated constructor stub		this.test = test;	}	public void Objests() {		int sum = 0;		for (int i = 0; i < test.getN(); i++) {			sum += i;		}		test.Objects2(sum);		// 4'.计算完毕,调用Test1提供的回调方法并讲结果传进去	}	@Override	public void run() {		// TODO Auto-generated method stub		try {			Thread.sleep(2000);		} catch (InterruptedException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		Objests();// 3'.为了使结果明显 Tools线程启用后会自己进入sleep状态 当再次苏醒后调用计算方法	}}测试函数如下
public class Test {	public static void main(String[] args) {		// TODO Auto-generated method stub		Test1 test = new Test1(100);		new Thread(test).start();			}}其中涉及到线程的手动结束,线程的数据传递等思想 很适合刚接触的人学习。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表