我是JAVA新手.
目前需要在主线程下再开一个线程,执行后台数据库操作,执行成功与否以事件的形式通知主线程.
请问,主线程如何接收子线程传来的结果(不需要象书里说的用到管道吧),还有如何以事件的方式通知主线程?我看了些资料有写到
CALLBACK机制,不过没有相关例子.请大家帮忙
目前需要在主线程下再开一个线程,执行后台数据库操作,执行成功与否以事件的形式通知主线程.
请问,主线程如何接收子线程传来的结果(不需要象书里说的用到管道吧),还有如何以事件的方式通知主线程?我看了些资料有写到
CALLBACK机制,不过没有相关例子.请大家帮忙
{
public void finish(String strMessage)
{
System.out.println(strMessage);
}
public static void main(String[] args)
{
ThreadSample sample = new ThreadSample();
WorkThread thread = new WorkThread(sample);
thread.start();
}}interface IFinish
{
public void finish(String strMessage);
}class WorkThread extends Thread
{
private IFinish callback = null;
public WorkThread(IFinish callback)
{
this.callback = callback;
}
public void run()
{
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
System.out.println("thread interrupted.");
}
callback.finish("mission accomplished.");
}
}
2.子线程是不断访问数据库,不断返回结果, 还是访问,返回,直到主线程获得返回结果后再度访问???其实用生产者消费者模式可以很好解决这个问题. I think!
2callback机制,子线程执行后调用主线程的方法
3wait,notify机制
to : hfree()
子线程只是每隔一段时间执行一次更新数据库的功能,主线程无需用到子线程的结果集,只要知道成功与否即可。成功就OK,不成功就要把错误信息写入日志了。
不是,主线程里的函数启动完子线程后就返回了,子线程里的功能每隔一定周期执行依次,每次执行的结果需要事件的方式通知主线程谢谢蓝色的猪,我去看一下DOC
我这两天一直在看JAVA线程编程,等我弄清楚些马上结贴
顺便问卢兄一个问题:
如果想通过EVENT通知主线程的ACTIONLISTENER该如何实现.比如子线程如果出错就触发一个自定义的EVENT通知主线程,让主线程知道
谢谢
谢谢你的例子,帮了我不少忙
我结合网的文章,实现了需要的功能/*Java 的接口支持提供了一种获得回调的等价功能的机制。
其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法。
*/
interface InterestingEvent
{
// 这仅是一个常规方法。因此如果需要,它可有返回值,也可接收参数。
public void interestingEvent ();
}
//发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用interestingEvent() 方法
class EventNotifier
{
private SpecialEvent ie;
public EventNotifier (SpecialEvent event)
{
// 保存事件对象以备后用。
ie = event;
}
public void doWork ()
{
bool successful;
try{
successful=doDatabaseOperation();
}
catch(...)
{
...
}
if(successful)
ie.interestingEvent();
}
}
public EventNotifier (interestingEvent event)
{
// 保存事件对象以备后用。
ie = event;
}
//然后是调用的主类
public class CallMe implements interestingEvent
{
private EventNotifier en;
private int i = 0;
public CallMe ()
{
// 创建事件通知程序,并将自身引用传递给它。
en = new EventNotifier (this);
}
// 为事件定义实际的处理程序。
public void interestingEvent ()
{
// 噢!必定发生了感兴趣的事件!
// 执行某些操作 ...
System.out.println("right,it Happened");
}
public static void main(String[] args) {
CallMe x = new CallMe();
x.en.doWork();
}}