多线程——使用多线程

本文介绍了Java中创建线程的三种方式:实现Runnable接口、继承Thread类和使用Callable/Future。重点讨论了如何停止、暂停线程,包括Thread.interrupt()的使用以及弃用的suspend/resume方法。此外,还讲解了yield方法的作用和线程优先级的设置及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近把《Java多线程编程核心技术》一书看了一遍,为了让自己更好的理解,写博客记录一下自己得感悟。

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

- 通过实现 Runnable 接口;
- 通过继承 Thread 类本身;
- 通过 Callable 和 Future 创建线程

Thread 方法

序号详解
1public void start() : 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
2public void run() :如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
3public void start() : 改变线程名称,使之与参数 name 相同。
4public final void setPriority(int priority) :更改线程的优先级。
5public final void setDaemon(boolean on) :将该线程标记为守护线程或用户线程。
6public final void join(long millisec) : 等待该线程终止的时间最长为 millis 毫秒。
7public void interrupt() : 中断线程。
8public final boolean isAlive() :测试线程是否处于活动状态。

Thread的静态方法如下:

序号详解
1public static void yield() : 暂停当前正在执行的线程对象,并执行其他线程。(让步方法)
2public static void sleep(long millisec) :在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响
3public static Thread currentThread() :返回对当前正在执行的线程对象的引用。

停止线程

停止线程是在多线程开发时很重要的一个技术点,停止一个线程以为着在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作。可以使用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但这个方法是不安全的。大多数停止一个线程的操作使用Thread.interrupt()方法

判断线程是否是停止状态

  • this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清楚为false的功能,为static方法。

  • this.isInterrupted():测试线程Thread对象是否已经是中断状态,但是不清除状态标志。

暂停线程

虽然suspend和resume方法可以分别使得线程暂停和回复,但是这两个方法因为有缺点而已经被弃用。

缺点:

独占:在使用suspend和resume方法时,如果使用不当,极易造成公共的同步对象独占,使得其他线程无法访问公共同步对象。
不同步:在使用suspend与resume方法时也容易因为线程而导致数据不同步的情况。

yield方法

可以使用yield方法进行暂停。
  yield()方法的作用是放弃当前的CPU资源,将它让给其他任务去占用CPU执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。

线程优先级

public final void setPriority(int newPriority) 更改线程的优先级。

首先调用线程的 checkAccess 方法,且不带任何参数。这可能抛出 SecurityException。 在其他情况下,线程优先级被设定为指定的 newPriority 和该线程的线程组的最大允许优先级相比较小的一个。

参数:

newPriority - 要为线程设定的优先级

  • Thread.MAX_PRIORITY表示线程的最大优先级
  • Thread.MIN_PRIORITY表示线程的最小优先级
  • Thread.NORM_PRIORITY表示线程的默认优先级

抛出:

IllegalArgumentException - 如果优先级不在 MIN_PRIORITY 到 MAX_PRIORITY 范围内。

SecurityException - 如果当前线程无法修改该线程。

注意:

  • 线程优先级从1到10,1是最不重要的,10是最重要的。默认一个线程的优先级为5
  • 优先级高低代表的是的每次抢到进程资源的概率.
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值