swing中创建事件分发线程,事件队列会一一存储并按顺序依次执行。比如说一个鼠标单击事件,当用按下鼠标,swing会分发线程去处鼠标理监听中鼠标按下要处理的事件。而主线程也将要绘制一些效果,比如鼠标按下、弹回去。如果在分发线程中执行一个长时间的任务,那主线程的绘画版面就不能及时执行,那么鼠标也不会弹起来了。所以不能在分发线程中执行长时间的任务呢。
android 中也类似哦,如果你在事件分发线程中执行一个长时间的任务会造成程序无响应异常。比如发起一个网络请求在android4.0以后就不允许编译通过了,网络请求通常耗时比较长。在android中时新建一个线程来执行。可以这么写,
ExecutorService exec=Executors.newCachedThreadPool();
exec.execute(new Runnable(){
public void run() {
//balabala……耗时任务
}});
exec.shutdown();
android使用多线程机制,主线程负责UI的绘制显示。事件分发线程中启动一个分支线程之后任务就完成了。主线程可以响应新的事件。新建的分支线程可以通过handler传递处理结果返回主线程。如果用户开启多个线程,就像同时执行多个任务一样拉风!
来个形象的大图!
简单的代码:
package com.shark.main; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button task1; private Button task2; private Button task3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); task1=(Button)this.findViewById(R.id.task1); task2=(Button)this.findViewById(R.id.task2); task3=(Button)this.findViewById(R.id.task3); final ExecutorService exec=Executors.newCachedThreadPool(); task1.setOnClickListener(new OnClickListener(){ public void onClick(View v) { exec.execute(new Runnable() { public void run() { for(int i=0;i<130000;i++) { System.out.println("Task1中的run"+i); } } }); } }); task2.setOnClickListener(new OnClickListener(){ public void onClick(View v) { exec.execute(new Runnable() { @Override public void run() { for(int i=0;i<130000;i++) { System.out.println("Task2中的run"+i); } } }); } }); task3.setOnClickListener(new OnClickListener(){ public void onClick(View v) { exec.execute(new Runnable() { public void run() { for(int i=0;i<130000;i++) { System.out.println("Task3中的run"+i); } } }); } }); } }
而在Swing不同!哦也!下班了,都说线程理解起来很麻烦,所以会很详细的把这部分弄清楚一点,待续……(ps:自言自语,说得好像会有人看似地!!)
相关推荐
飞机大战游戏:主要演示Kotlin语言环境下的SurfaceView+多线程并发操作 现在手机上的游戏无论大小都用游戏引擎开发了,毕竟游戏开发和应用开发是两个领域,所涉及的技术栈和专业知识各不相同,最大的区别在开发效率...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...