java基础之Thread笔记

1、线程进程介绍:

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

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

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

  他们之间的关系:一个进程可以包含多个线程,至少一个线程。

  

2、创建线程:

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

    java基础之Thread笔记_第1张图片

 

 

 

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

    java基础之Thread笔记_第2张图片

 

 

   C、实现Callable接口

 

 

     java基础之Thread笔记_第3张图片

 

 

 3、线程状态

  java基础之Thread笔记_第4张图片

 

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

 

 

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

  • New:新创建的线程,尚未执行;
  • Runnable:运行中的线程,正在执行run()方法的Java代码;
  • Blocked:运行中的线程,因为某些操作被阻塞而挂起;
  • Waiting:运行中的线程,因为某些操作在等待中;
  • Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;
  • Terminated:线程已终止,因为run()方法执行完毕。

4、中断线程

  java基础之Thread笔记_第5张图片

 

 

 

  A、

  

 

 

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

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

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

5、守护线程

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

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

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

6、线程优先级

  java基础之Thread笔记_第6张图片

 

 

 

7、线程同步

  

 

  有两种此关键字用法。

  A、synchronized方法

    在方法加此关键字

    java基础之Thread笔记_第7张图片   

  B、synchronize块

    java基础之Thread笔记_第8张图片

    java基础之Thread笔记_第9张图片

 

 

   比较: 

  java基础之Thread笔记_第10张图片

 

 

 8、lock

  java基础之Thread笔记_第11张图片

 

 

 

  java基础之Thread笔记_第12张图片

 

 

 9、线程通信

  java基础之Thread笔记_第13张图片

  java基础之Thread笔记_第14张图片

 

  生产者消费者问题

  java基础之Thread笔记_第15张图片

 

 

 

 

 

 

  

  

你可能感兴趣的:(java基础之Thread笔记)