线程

来源:互联网 发布:floyd算法结果 编辑:程序博客网 时间:2024/05/21 17:58
进程与线程总结:
 1, 某个类,想具备多线程操作功能
     (1) 继承Thread,则调用start()运行线程
     (2) 实现Runnable,则先构造Thread类实例,再调用start()方法
   
 2, 线程实例.run() 与    线程实例.start()  的区别:
           直接调用run(),顺序执行
           调用start(),本质上还是调用run(),并发执行
      通过调用start()来启动线程
       
 3, 使用 Thread类  与  Runnable接口 的接口     (最好使用Runnable接口)
         使用Thread,不能实现资源共享
         使用Runnable,可进行资源共享
 
 4, Thread类 其实 就是Runnable 接口的子类
 
 5, 线程的状态:
   创建状态   : 线程已实例化  (等待CPU调度)
   就绪状态   : 调用了start(), 等待CPU调度
   运行状态   : 执行run()    (遇到导致阻塞的事件,则进入阻塞状态)
   阻塞状态   : 暂时停止执行,可能将资源交给其他线程使用   (阻塞解除后,回到就绪状态,等待CPU调度)
   终止状态   : 线程执行完毕(即死亡状态)
   
  
 6, Thread的基本知识点
    a,常见的方法:
        currentThread()  :当前线程
        isAlive()        :判断线程是否启动
        join             :让一个线程强制运行,该线程运行期间,其他线程无法运行   
    sleep()          :让线程暂时的休眠
    yield()          :将一个线程的操作,暂时让给其他线程来执行(线程礼让)
    interrupt()      :线程中断
    setDaemon(on)    :让线程在后台运行
    b,如果程序没有为线程命名,则系统会自动为线程命名:thread-0,thread-1...
    c,线程实例.run(),则当前线程的名称为:main  ,即:主方法也是一个线程——主线程
    d,每当java程序执行时,就会启动一个JVM,每一个JVM实际上就是在操作系统中启动了一个进程。
      java运行时至少启动两个线程:main,GC(垃圾回收机制)
  e,3种优先级:MAX_PRIORITY(10)、NORM_PRIORITY(5)、MIN_PRIORITY(1) 。
     优先级越高,越容易先被执行。
    主方法的优先级为:NORM_PRIORITY
    
7,  线程的休眠操作


8,  同步与死锁
         死锁:表示互相等待,是在程序运行过程中一种表现状态
         注:资源共享时需要进行同步操作
               程序中过多的同步可能会产生死锁
    
    
10,线程的生命周期
   创建: 通过 new Thread() 创建线程实例
   运行: 调用start(),进入运行状态(在运行状态可以通过yeild()进行礼让后,继续执行)
   暂停: 调用sleep()或wait()
   销毁: 通过设置标志位boolean,结束线程    (run方法执行完毕,也表示结束线程)
   
   注:
   suspend():暂时挂起线程
   resume():恢复挂起的线程
    stop():停止线程
    均已过时,不推荐使用。这些方法都会产生死锁
原创粉丝点击