Java多线程技术相关收纳和总结

多线程的概述

线程是进程中的一条执行路径,存在自己独立的栈空间,占用进程中一块桶内存,因此能够独立的执行特定的任务。当多个线程共用一个任务时,对共有的属性和变量进行相应的操作,会引发相应的线程安全问题。

  1. 线程的三种创建方式
  2. 线程的6个状态
  3. 线程安全问题

线程的三种创建方式

1.继承Thread类,重写其中的run()方法,run()编写的就是线程要执行的任务,其方式跟main()一致,是程序的入口。
Java多线程技术相关收纳和总结
程序执行图:
Java多线程技术相关收纳和总结
如图所示:主线程和线程的执行方式是并发的,在执行上是相互独立的。继承Thread的方式来创建线程,任务是和线程捆绑的一起的,不利于多线程执行一个同一个任务。

2 通过实现Runnable接口,创建任务,在将任务传递给Thread线程。
在这个方式中,同样要重写run()方法。(推荐)
Java多线程技术相关收纳和总结
如图所示,任务与线程分离,既提高程序的健壮性,又能够在多线程执行同一个任务时,只需将任务传递,提供便利。

3.通过实现Callable接口,此方法和Runnable不同,存在返回值,能够抛出异常。
Java多线程技术相关收纳和总结
Java多线程技术相关收纳和总结

线程的6个状态

  1. new 线程还没有启动的状态
  2. runnable 线程在执行的状态
  3. blocked 线程在被阻塞而被监视的状态
  4. waiting 线程无限期等待的状态
  5. timed_waiting 线程设置最大等待时间的等待状态
  6. terminated 线程退出的状态

线程安全问题

当采用多线程去执行一个任务的时候,由于多个线程并发执行,在同一时间段,多个线程同时执行任务,会产生一些线程安全的问题。
如下:创建一个如下任务,输出1-10的值,
Java多线程技术相关收纳和总结
程序测试执行如下:
Java多线程技术相关收纳和总结
Java多线程技术相关收纳和总结
如上图所示,出现了输出同一个数,输出负数的情况。这是由于计算机中线程的调度是抢占式调度,可能发生同一时间段内,多个线程执行再同一个任务,导致数据出现偏差。防止这种情况发生,可以给任务“上锁”。使得线程在执行到“上锁”的地方排队执行,从而避免发生这种线程不安全的问题。
加锁的方式存在显式锁和隐式锁:隐式锁有 1 同步代码块 和 2 同步方法
显示锁有 Lock 锁。