java快速入门 (13)

不过实现Runnable接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法有返回值,可以声明抛出异常而已。 因此可以将实现Runnable接口和实现Callable接口归为一种方式。

Runnable、Callable接口的方式创建多线程,所以非常适合多个相同线程来处理同一份资源的情况,如果需要访问当前线程,则必须使用Thread.currentThread()方法

采用继承Thread类的方式创建多线程,因为线程类已经继承了Thread类,所以不能再继承其他父类

生命周期

线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态

下载

image-20210809153146504


Thread.State:

初始(NEW):新创建了一个线程对象,但还没有调用start()方法。

运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。

阻塞(BLOCKED):表示线程阻塞于锁。

等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。

超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。

终止(TERMINATED):表示该线程已经执行完毕

线程的优先级

Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度
器按照优先级决定应该调度哪个线程来执行。
线程的优先级用数字表示,范围从1~10.
hread.MIN_PRIORITY = 1;
Thread.MAX_PRIORITY = 10;
Thread.NORM_PRIORITY = 5;
使用以下方式改变或获取优先级
getPriority() . setPriority(int xxx)

线程方法 1 public void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
2   public void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。  
3   public final void setName(String name) 改变线程名称,使之与参数 name 相同。  
4   public final void setPriority(int priority) 更改线程的优先级。  
5   public final void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。  
6   public final void join(long millisec) 等待该线程终止的时间最长为 millis 毫秒。  
7   public void interrupt() 中断线程。  
8   public final boolean isAlive() 测试线程是否处于活动状态。  
9   public static void yield() 线程礼让: 暂停当前正在执行的线程对象,并执行其他线程。  
10   public static void sleep(long millisec) 线程休眠: 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。  
11   public static boolean holdsLock(Object x) 当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。  
12   public static Thread currentThread() 返回对当前正在执行的线程对象的引用。  
13   public static void dumpStack() 将当前线程的堆栈跟踪打印至标准错误流。  

停止线程:jdk提供了stop,但不建议使用可以自己去停止它

守护(daemon)线程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfzgp.html