Java 多线程通信 交互

无为剑士 2015-05-05 10:00:10
我现在要实现一个功能,里面有个2个类,同时也是两个线程,A和B,现在A把B启动,B中有Looper,Handler, A就可以发消息给B,然后B完成任务之后,需要给一个对象Bitmap给A,我想问下这个改如何实现,不单单是把这个Bitmap给A就行了,还需要让A处理这个Bitmap

我的想法是B完成之后调用A的函数,传递Bitmap,然后函数内可以处理这个Bitmap,但是这样的话,第一,B需要有A的引用,但是B又是A启动的,这两个就相互引用,我觉得有点乱,第二,B调用A的函数,本质上,这个函数还是在B的线程中的,所以有点不符合要求

然后我在想在A里面也加个Looper?然后B给A发消息? 这个听起来是可行,但是A不是独立的,A作为一个功能类也是被调用的,这样的话加Looper会不会对其他环境造成影响呢?

本人刚接触Java多线程,基础概念都明白,但是通信这一块目前还不是很懂,请大家指教
...全文
290 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-05-06
  • 打赏
  • 举报
回复
如果你不想阻塞A线程同时B线程传回的数据也要耗时处理,你可以再起一个含有消息队列的C线程,把图片发给它处理。如果有必要通知,最后把最不耗时的处理结果发给A就可以。我去,好饶,不知道可行性,仅提供参考。
无为剑士 2015-05-06
  • 打赏
  • 举报
回复
是这样的,B要生成的Bitmap有几百张,然后A要每次向B请求,并给出不同的参数,所以没办法直接给B,所以只能通过handler发消息,传递参数,B再根据参数生成图片,因为A请求数据是连续的,所以如果说B每次处理完了就结束,然后下次请求再实例化一个B,这样几百个次连续做起来,性能肯定低。 所以B的handler应该是必要的。 至于说A启动B并传递Handler,然后让B处理完传递消息给A处理,这样应该是可行的,但是A同时也是为其他类提供服务,意味着,A也要被调用。 这个关系就比较乱了,我有点绕不过来了 求指教
引用 1 楼 qq118194716 的回复:
既然是A启动B,那么数据是直接可以交给B的,为什么需要B中有handler 而且B属于专门处理数据的子线程,处理完了就应该结束,难不成你还想让它挂起等待处理新的数据? 真是这样你需要是再重新启动一个线程 所以我认为只需要在A中拥有handler,直接启动B并让B持有A的handler,B处理完后通知A就可以了 如果回来的bitmap处理起来比较耗时,再启动一个线程专门处理bitmap呗 你可以参考下Android AsyncTask异步处理方式
无为剑士 2015-05-06
  • 打赏
  • 举报
回复
嗯,只是觉得A B相互有对方handler来传消息,相互耦合的太厉害,有点不放心 可能我多线程做的比较少吧,觉得这种挺纠结的
引用 5 楼 qingyuan18 的回复:
相互调用耦合度高的情况,用消息机制,A,B线程都通过JMS通信,JMS的消息body里面放两者交互的对象(可以是序列化的类,纯文本或者io流)
qingyuan18 2015-05-06
  • 打赏
  • 举报
回复
相互调用耦合度高的情况,用消息机制,A,B线程都通过JMS通信,JMS的消息body里面放两者交互的对象(可以是序列化的类,纯文本或者io流)
无为剑士 2015-05-06
  • 打赏
  • 举报
回复
我也觉得绕,哪怕是只有A和B,两个都要有消息队列,然后相互发消息,这个就挺绕了 我去试试,谢谢
引用 3 楼 qq118194716 的回复:
如果你不想阻塞A线程同时B线程传回的数据也要耗时处理,你可以再起一个含有消息队列的C线程,把图片发给它处理。如果有必要通知,最后把最不耗时的处理结果发给A就可以。我去,好饶,不知道可行性,仅提供参考。
飏飏一蝶 2015-05-05
  • 打赏
  • 举报
回复
既然是A启动B,那么数据是直接可以交给B的,为什么需要B中有handler 而且B属于专门处理数据的子线程,处理完了就应该结束,难不成你还想让它挂起等待处理新的数据? 真是这样你需要是再重新启动一个线程 所以我认为只需要在A中拥有handler,直接启动B并让B持有A的handler,B处理完后通知A就可以了 如果回来的bitmap处理起来比较耗时,再启动一个线程专门处理bitmap呗 你可以参考下Android AsyncTask异步处理方式

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧