JAVA复习笔记之多线程并发

前言:多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,还是值得深入研究一下

概念:

1 线程:进程中负责程序执行的执行单元
线程本身依靠程序进行运行
线程是程序中的顺序控制流,只能使用分配给程序的资源和环境

2 进程:执行中的程序
一个进程至少包含一个线程

3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程

4 多线程:在一个程序中运行多个任务
目的是更好地使用CPU资源

线程的实现

线程实现方式有2种:

继承Thread类和实现Runnable接口(推荐使用)

继承Thread

public class VolatileTest extends Thread {
    public void run(){
        System.out.println("线程执行");
    }

    public static void main(String[] args) {
        new VolatileTest().start();
    }

}

实现Runnable

public class ConsumerWorker implements Runnable {
  
  public void run() {
    
        //执行逻辑
            }

    }

通过调用start()方法来启动线程,注:调用run()方法也可以执行代码,但是并没有另起线程而是在原线程中执行逻辑(start()方法可以理解为,先创建一个线程,然后该线程执行run()方法)

线程的状态

  • 创建(new)状态: 准备好了一个多线程的对象
  • 就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度
  • 运行(running)状态: 执行run()方法
  • 阻塞(blocked)状态: 暂时停止执行, 可能将资源交给其它线程使用
  • 终止(dead)状态: 线程销毁

状态切换的方法

start:启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源;由创建状态变为就绪状态

run:不需要用户来调用的,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务;由就绪状态变为运行状态

wait():在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行),由运行状态进入阻塞状态,释放锁

sleep():在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行),由运行状态进入阻塞状态,不释放锁

yield:让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。由运行状态改为就绪状态

join:主线程等待子线程执行完成之后再结束在进行

interrupt:暂停线程

线程的优先级

在操作系统中,线程可以划分优先级,优先级较高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务。

 

======待续

 

posted @ 2018-01-25 19:32  等待九月  阅读(223)  评论(0编辑  收藏  举报