关闭

java线程

97人阅读 评论(0) 收藏 举报
Java线程
     多线程是操作系统的重要组成部分,可以提高应用程序的效率,将耗时操作放进工作线程,可以提      高用户体验.

进程的特点:


     可以同时存在多个进程,这些进程会交替执行,且切换频率高,每次切换到某个进程时,该进程运行的时间比较随机。
     进程是若干个线程的集合,当进程运行时,真正运行的是进程中的线程。
     一个进程可以有多个线程,每个正在执行的进程中,都至少存在1个正在执行的线程。


     每个进程启动时,会默认开启1个线程,该线程通常称之为“主线程”。
     开发者可以在程序中自由的创建新的线程,并启动,这些新的线程通常称之为“子线程”,或者“工作线程”。



创建并启动线程

【方式1】
     1. 自定义类,继承自java.lang.Thread类
     2. 在自定义类中重写public void run()方法
     3. 当需要启动线程时,创建自定义类的对象,并调用该对象的start()方法
【方式2】
     1. 自定义类,实现java.lang.Runnable接口
     2. 在自定义类中重写public void run()方法
     3. 当需要启动线程时,创建自定义类的对象.
        然后,创建Thread类的对象,在创建Thread类对象时,将自定义类对象作为构造方法的参数.
        最后,调用Thread类对象的start()方法.



ANR

     ANR:Application Not Responding:应用程序无响应
     ANR是由于主线程执行任务消耗时间过长导致的。



Android中的UI线程模型

     UI:User Interface
     在Android系统中,主线程是用于初始化界面、响应用户在界面上的操作等等的,
所以,主线程也叫做UI线程。
     UI线程执行时间过长,则可能导致ANR!如果是在Activity中,则超过5s就可能出现ANR,
     如果是在BroadcastReceiver中,则超过10s就可能出现ANR。
     对于开发者而言,只要是消耗时间可能比较长的操作,都应该规避处理。
解决ANR问题的根本方法:把耗时操作放在子线程中运行!



在子线程中更新UI

     不允许在子线程中直接更新UI,否则应用程序将崩溃

解决方案:
     当需要在子线程中更新UI时,调用runOnUiThread()方法即可。

0
0
查看评论

如何终止java线程

终止线程的三种方法      有三种方法可以使终止线程。      1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。      ...
  • anhuidelinger
  • anhuidelinger
  • 2013-09-16 19:51
  • 160067

linux下查看Java线程

为了方便我下次查找所以写了 这个博客记录下别人的 以下是别人的链接 http://www.jiacheo.org/blog/279 https://www.zhihu.com/question/20238208
  • u013086392
  • u013086392
  • 2017-01-29 16:39
  • 3155

Java与线程

揭开java线程和操作系统线程之间的神秘面纱
  • lingdudebing
  • lingdudebing
  • 2016-03-08 03:21
  • 477

Java垃圾回收无效线程吗?

测试结果表明:线程在无效之后,GC会回收无效线程,参考附图由原先的18个线程编程12个线程 测试代码: public class ThreadTest { public static void main(String[] args) { ThreadTest threa...
  • tomli2017
  • tomli2017
  • 2017-04-16 17:18
  • 667

java四种线程的使用

Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。...
  • w_wensan
  • w_wensan
  • 2017-04-12 14:31
  • 507

Java最佳线程数

对于计算密集型任务,在拥有Ncpu个处理器的系统上,当线程池大小为N+1时,通常能实现最优的利用率,(即当计算密集型任务偶尔由于页缺失故障或者其他原因而暂停时,这个额外的现线程也能够确保CPU的时钟周期不会被浪费。)  对于包含IO操作或者其他阻塞操作的任务,由于线程并不会一直执行,...
  • cloudeagle_bupt
  • cloudeagle_bupt
  • 2017-04-05 16:26
  • 784

java线程常用方法详解

1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为M...
  • nan167567
  • nan167567
  • 2016-08-01 19:57
  • 4272

Java并发编程番外篇(一)如何结束一个线程

本篇博客介绍下如何结束一个线程。在Java 的设计中,当一个线程的run方法中代码执行结束后,该线程就自动结束了。但是,在我们的实际开发过程中,可能会需要手动的结束一个线程,此时我们应该怎么安全地结束一个线程呢?1. stop方法根据Java的官方文档,Java Thread,该方法已被弃用。文档给...
  • u014088294
  • u014088294
  • 2016-08-12 08:37
  • 633

java中线程的基本操作!

java中建立线程可以有两种方式,分别是继承Thread类和实现Runnable接口. 1.继承Thread public class MyThread extends Thread{ public MyThread(String name){ super(name); } ...
  • kkkkkxiaofei
  • kkkkkxiaofei
  • 2013-10-11 16:44
  • 1866

Java多线程的常用方法(命名与取得)

一、线程的命名与取得 所有的线程程序的执行,每一次都是不同的运行结果,如果要想区分每一个线程,那么久必须依靠线程的名字。对于线程的名字一般而言会在启动之前进程定义,不建议对已经启动的线程,进行更改名称,或者为不同线程设置重名的情况 如果要进行线程名称的操作,可以使用T...
  • wangdajiao
  • wangdajiao
  • 2016-07-26 21:40
  • 5739
    个人资料
    • 访问:589次
    • 积分:47
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档