AsyncTask对于UI线程和Android中的其他线程之间的同步非常有用。所以我已经阅读了它的source code并试图移植到java经典(JDK)但没有成功,因为java中没有一些类(Message,Handler ..)。
我想创建一个包含一些有用函数的类,如AsyncTask(可以在主线程和其他线程之间同步):
doInBackground(Params... params)
onProgressUpdate(Progress... values)
onPostExecute(Result result)
publishProgress(Progress... values)
onPreExecute()
onCancelled()
有没有办法尝试?
答案 0 :(得分:14)
同意SwingWorker
与[{1}}
如果您不使用Swing,则另一个选项是AsyncTask
:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html
这篇文章演示如何使用ThreadPoolExecutor
生成多个后台线程:http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html
生成一个运行并完成而没有进度更新的后台线程(这也是Android中ThreadPoolExecutor
的常见用法)可以简单如下:
AsyncTask
答案 1 :(得分:13)
1。 AsyncTask
专为Android设计,用于同步UI线程和非UI线程,也称为无痛线程 ....
2. 在Java中有一个名为SwingWorker
的AsyncTask替代方案。
请参阅此链接以获取一个不错的基本教程:
http://kodejava.org/how-do-i-use-swingworker-to-perform-background-tasks/
答案 2 :(得分:0)
我使用Observer设计模式来处理类似的情况。在产生后台线程后,主线程进入睡眠模式。当后台线程完成异步任务时,它会使用回调消息唤醒主线程。这实际上删除了等待回调的同步对象上的块。