Java多线程

多线程技术概述

 

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

多线程是多任务的一种特别的形式,但是多线程使用了更小的资源开销。

 

线程与进程

  进程

    是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,包含一个或多个线程。一个线程不能独立存在,它必须是进程的一部分。一个进程一直运行,直到所有的非 守护线程都执行结束运行后才能结束。

  线程

    是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行。 一个进程最少 有一个线程 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分 成若干个线程。

 

线程的生命周期

 

线程是一个动态的执行过程,也有一个从生产到死亡的过程。

  新建状态:使用new关键字和Thread类或子类建立一个线程对象后。

  就绪状态:现场对象调用start()方法。

  运行状态:线程获取CPU资源,执行run()方法。

  阻塞状态:线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用的资源。

    等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。

    同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。

    其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。

  死亡状态:一个运行状态的线程完成任务或者其他终止条件发生时。

 

 

线程优先级

 

  每一个 Java 线程都有一个优先级,这样有助于操作系统确定线程的调度顺序。

  Java 线程的优先级是一个整数,其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。

  默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)。

  具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序,而且非常依赖于平台。

 

 

创建一个线程

 Java提供了三种创建线程的方法:

   实现Runnable接口;

   继承Thread类;

   通过Callable和Future创建线程。

 

区别
  通过创建任务给线程分配的方式来实现多线程 更适合多个线程同时执行相同的任务。
  可以避免Java单继承的局限性。
  任务与线程本事是分离的,提高了程序的健壮性。
  线程池只接受Runnable类型的任务,而不接受Thread类型的线程。

 

 

线程常用方法

start()    线程开始执行

setName()  更改线程名称

getName()  获取线程名称

setPriority()   更改线程优先级 

serDaemon()   表记为守护线程或用户线程

isAlive()    测试线程是否处于活跃状态

sleep()    在指定毫秒数内让线程休眠

currentThread()     获取当前正在执行的线程

 

 守护线程
 
线程分为守护线程和用户线程
 
  用户线程 :当一个进程不包含任何一个存货的用户线程是,进行结束。
 
  守护线程 :守护用户线程,当最后一个用户线程结束,守护线程死亡。

 

 

线程池 Executors

  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程 就会大大降低 系统的效率,因为频繁创建线程和销毁线程需要时间. 线程池就是一个容纳多个线程的容 器,池中的线程可以反复使用,省去了频繁创建线程对象的操作,节省了大量的时间和资源。

线程池的好处: 降低资源消耗。 提高响应速度。 提高线程的可管理性。

 

 

并发和并行的区别

并行和并发区别. 并发是指一个处理器同时处理多个任务。.并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。

并发的多个任务之间是互相抢占资源的。 并行的多个任务之间是不互相抢占资源的、

只有在多CPU的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的。

 

 

线程安全和非线程安全

线程安全就是多线程访问,使用synchronized加锁机制,当一个线程访问某个数据的时,进行保护,其他线程必须等到该线程访问结束才能访问。

线程不安全就是不提供数据保护,多个线程同时对一个数据进行访问和修改导致的数据不一致。

 
posted @ 2021-03-26 23:40  秋秋ovo  阅读(55)  评论(0)    收藏  举报