一、Java线程概述
线程基础概念:
线程是操作系统调度的最小单元,它是进程的一部分,每个线程都有自己的程序计数器、栈和局部变量。线程之间共享进程的堆和方法区。
Java线程创建和启动:
在 Java 中主要有两种方式创建线程:
- 继承 Thread 类:创建一个新 class,继承自 Thread 类,然后重写 run() 方法,并在该方法中执行需要在该线程中运行的代码。最后创建该 class 的实例,并调用其 start() 方法启动该线程。
- 实现 Runnable 接口:创建一个新 class,实现 Runnable 接口,然后实现 run() 方法,并在该方法中执行需要在该线程中运行的代码。随后创建 Thread 对象,将 Runnable 接口的对象作为参数传递给 Thread 构造器,最后调用 Thread 对象的 start() 方法启动该线程。
线程的生命周期及其状态转换:
Java线程生命周期主要有五种状态:
- 新建(New)状态:刚创建一个线程对象时,如 new Thread()。
- 就绪(Runnable)状态:当调用 start() 方法,线程处于就绪状态,随时等待线程调度器启动。
- 运行(Running)状态:线程调度器选择后进入运行状态。
- 阻塞(Blocked)状态:因为某些情况被阻塞,如等待输入或输出、获取锁失败等。
- 死亡(Terminated)状态:线程执行完毕或因异常退出。
线程中断:
线程中断是通过调用 Thread 类中的 interrupt() 方法实现的,它只是改变了线程的中断状态,不会真正的停止线程。线程需要配合该状态,各自决定如何响应中断。
线程优先级:
在 Java 中,线程的优先级范围是1-10。Thread 类中定义了三个整型常量来表示这些优先级,分别为 MIN_PRIORITY(最小优先级,值为1)、NORM_PRIORITY(普通优先级,值为5)和 MAX_PRIORITY(最大优先级,值为10)。当线程的优先级越高,从操作系统获得调度的概率就越大,但并非绝对的,这也依赖于操作系统的任务调度策略。
二、线程同步
锁的概念:
锁是一种同步机制,用于控制多线程对共享资源的访问。锁提供了对资源的独占访问,保证只有一个线程在同一时间内访问资源,以此来防止线程间的并发冲突。
synchronized关键字:
syn