关于多线程的一些体会 V1

         写了一些代码,这次主要是记录线程相关的一些信息,以idea内部的多线程书写。(类似于安卓线程)由于觉得觉得现阶段的应用比较少,所以并没有去系统的学习一下多线程模型,只是将自己平时遇到的,偶尔会碰到的一些情况记录下来,最终如果遇到的足够多的话再去反学会比较方便而快的。

        是java相关的。这是以场景为基础去描写的解决方案。

        一、第一个场景是需要去执行一个任务,执行过程中需要进行ui的变化,这就必须要去开一个UI线程去解决这个问题了。这是因为java中规定设计UI的必须要开UI现场或者回到主线程处理,去年在做安卓时候也是遇到了这个问题,自己在其他现场中操作ui是行不通的。如果前一个过程比较快的话推荐回到主线程处理,减少自己的逻辑复杂性。前一个线程耗时多的话那就没话说了,开UI现场。在idea开的UI线程使用的函数是 AppUiThread.onUiThread()。如果没看过的话,找这个是最难的部分,当然这个部分是找了组长大佬解决了。 这里解决了这个场景的第一个问题,就是已经可以弹出对话框了,接下来就要有第二个问题,逻辑的问题,这个逻辑是我需要这个函数已知执行,等他她的返回结果,所以我需要一个带返回值的线程。因为要等待现场的返回结果,这里就是线程使用的第二个区别,带返回值与不带返回值的区别。这里就是现场返回值会有一个Callable<>去接受返回值,不带返回值就不需要基础这个方法,直接runable即可。接收完成后传出执行的线程,然后利用waitfor函数将其完成,在这个线程中,因为需要监测线程,并且需要将过程中的东西输出到idea某个指定的控制台,这里需要用一个监测的东西。processHandle。他可以执行并监督线程,并且将结果输出到控制台。控制台获取结果是自动的,而自己需要监测就是扩展扩展processHandle去监控获取。这里自己去获取状态的另一种方式,上一个是利用 xxxManager.getInstance() 去获取,这次是利用添加listener来获取状态信息。给handle扩展了listener后,需要扩展一些precessAdaptor。这里按行读取结果,ontextaviable函数,这里有所不同,idea中super函数放自己处理的逻辑前后都无所谓,但是这里需要获取事件,需要放到super后,然后利用event去获取执行的值。最后细节,输出一行,有/r/n 记得处理。

        以上是一个比较复杂的UI线程的处理, 需要等待结果还需要检测执行情况,而且是一个UI线程。

        二、是一个比较简单的情况,具体的做法是开一个开一个UI线程,使用的也是IDEA的封好的线程方法,我看公司里面有个大神也是自己重新封了一套线程规则,自己使用。使用的是Application.excutionpoll来执行现场,这个线程不需要返回值,所以是比较简单的 ,就是执行到这里进入线程,主线程往下走,执行完成后输出结果。

        三、一个简单情况,和二不同,要在这个线程堵塞住,等待返回结果,这里利用的是java原生的多线程去接受信息。利用Future去接受信息,然后future<x>返回值,x是个泛型,最后还要用get方式得到实际的泛型。得到最后的结果。

        四、最近遇到的一个问题,是自己想要套线程的情景,预想做一个交互式的场景,在跑的过程中询问,本来已经开了一个子线程了,但是想要在里面继续套UI线程,经过多次尝试失败了,最后是UI线程单挂了。但是下面的普通线程挂一下其他线程是没有问题的。

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值