java基础之Thread笔记

一、线程进程介绍:javascript

  程序:指令和数据的有序集合,静态概念;  java

  进程:执行程序的一次执行过程,一个动态概念,是系统资源分配的单位;spa

  线程:cpu调度和执行的过程,是独立的执行路径。线程

  他们之间的关系:一个进程能够包含多个线程,至少一个线程。3d

  

二、建立线程:code

  A、继承Thread类,重写run()方法;对象

    

 

 

 

  B、实现Runnable接口,实现run()方法;blog

    

 

 

   C、实现Callable接口继承

 

 

     

 

 

 三、线程状态接口

  

 

  大体过程:new一个Thread后线程对象进入了新生状态,当调用start()方法后,线程当即进入了就绪状态,可是并非必定当即调度执行;调度后进入了运行状态,这时候线程才执行线程内的代码;当运行时调用sleep、wait或同步的锁定时,线程就进入了阻塞状态,只有当阻塞事件解除后从新进入就绪状态等着cpu调度执行。完成全部代码后或者中断那么线程进入死亡状态,没法再次启动此死亡线程。

 

 

  Java线程的状态有如下几种:

  • New:新建立的线程,还没有执行;
  • Runnable:运行中的线程,正在执行run()方法的Java代码;
  • Blocked:运行中的线程,由于某些操做被阻塞而挂起;
  • Waiting:运行中的线程,由于某些操做在等待中;
  • Timed Waiting:运行中的线程,由于执行sleep()方法正在计时等待;
  • Terminated:线程已终止,由于run()方法执行完毕。

四、中断线程

  

 

 

 

  A、

  

 

 

    B、sleep会使当前线程阻塞;时间到达后进入就绪状态。每个对象都有一个锁,sleep不会释放锁。

    C、Join会合并线程,插入后只有出入的线程执行完成后,才会执行其余线程,其余线程会阻塞。

  D、在run()中使用Thread.yield()会使线程执行到此刻礼让,可是不阻塞只是暂停。此刻cpu从新调度,可是礼让不必定成功,取决于cpu再次调度了谁。

五、守护线程

  线程有用户线程和守护线程。虚拟机确保用户线程执行完毕,可是不用等待守护线程执行完毕。

  在调用start()方法前,调用setDaemon(true)把该线程标记为守护线程:

  Thread t = new MyThread();   t.setDaemon(true);   t.start();

六、线程优先级

  

 

 

 

七、线程同步

  

 

  有两种此关键字用法。

  A、synchronized方法

    在方法加此关键字

       

  B、synchronize块

    

    

 

 

   比较: 

  

 

 

 八、lock

  

 

 

 

  

 

 

 九、线程通讯

  

  

 

  生产者消费者问题

  

相关文章
相关标签/搜索