Java中Thread类的方法简介
1.新建线程
Thread t1 = new Thread();
t1.start();
新建线程,应该调用start()方法启动线程;如果直接调用run()方法,该方法也会执行,但会被当做一个普通的方法,在当前线程中顺序执行;而如果使用start()方法,则会创建一个新的线程执行run()方法。
2.线程中断
public void interrupt();
public boolean isInterrupted();
public static boolean interrupted();
三个方法很相似,线程中断只是通知目标线程有人希望你退出,而并不是使目标线程退出。
第一个方法是通知目标线程中断,即设置目标线称的中断标志位;
第二个方法判断当前线程是否被中断,如果被中断(即中断标志位被设置),则返回true,否则返回false;
第三个方法判断当前线程的中断状态,并清除该线程的中断标志位(也就意味着,如果连续调用两次该方法,并且中间没有再次设置中断标志位,第二次会返回false,因为中断标志位已经被清除)。
public static native void sleep(long millis) throws InterruptedException;
sleep()方法会将当前线程休眠若干ms,如果在休眠期间被调用interrupt()方法,则会抛出InterruptedException异常。如下:
public class TestThread implements Runnable{@Overridepublic void run() {while(true) {if(Thread.currentThread().isInterrupted()){ //如果当前线程已经被设置了中断标志位,则返回trueSystem.out.println("Interrupted");break;}try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {System.out.println("Interruted when sleep!");Thread.currentThread().interrupt(); //Thread.sleep()方法由于中断而抛出异常,此时,它会清除中断标记;}Thread.yield();}}public static void main(String[] args){Thread t1 = new Thread(new TestThread());t1.start();t1.interrupt(); //设置目标线程的中断标志位,中断标志位表示当前线程已经被中断了}
}
3.等待(wait)和通知(notify)
public final void wait() throws InterruptedException;
public final native void notify();
public final native void notifyAll();
obj.wait()是设置当前线程在该对象上等待,直到有线程调用obj.notify()方法(或notifyAll()方法)。当调用wait()方法后,该线程会进入一个等待队列,等待队列中可能有多个线程,notify()会随机唤醒其中一个线程,而notifyAll()会唤醒所有线程。
wait()和notify()方法必须在sychronized代码块中,调用这些方法时都需要先获得目标对象的一个监视器,然后调用这些方法时会释放监视器
与sleep不同的是,sleep()会一直占有所持有的锁,而wait()会释放锁。
4.等待线程(join)和谦让(yield)
public final void join() throws InterruptedException;
public static native void yield();
如果一个线程的执行需要另一个线程的参与(比如当前线程执行需要另一个线程执行完毕才能继续执行),这时候可以调用join()方法。t1.join()方法表示等待线程t1执行完毕之后,当前线程再继续执行。当然也可以给join()设置时间参数。
注:join()的本质是让调用线程wait()在当前线程对象实例上,其部分源码如下:
while (isAlive()) {wait(0);
}
当线程执行完毕后,它会让被等待的线程在退出前调用notifyAll()通知所有等待的线程继续执行。因此不要在Thread对象实例上使用类似wait()或者notify()等方法。
yield()方法是使当前线程让出CPU,但该线程会再次抢夺CPU。
Java中Thread类的方法简介相关推荐
- 在java中下列描述错误的是_在 JAVA 中 , 关于类的方法 , 下列描述错误的是 ()._学小易找答案...
[多选题]价值的特性是 [简答题]输入任一字符串,统计其中数字,字母及其它字符个数 .(25分) [填空题]1.产品整体包括哪五个基本层次 2核心层次产品最基本的层次,是产品的_____ [单选题]纸 ...
- java的Thread类start0方法源码
带着几个问题去看源码 1.如何找到native方法的源码 2.Java的Thread对象.JavaThread.OSThread.操作系统线程 3.Java线程与操作系统线程的关联 4.Java线程保 ...
- Java中String类的方法及说明
String : 字符串类型 一.构造函数 String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数 ...
- 【转载】Java中String类的方法及说明
转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数 String ...
- Java中Thread类的start()和run()方法
1.两个方法的区别 start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.start()不能被重复调用. run() : run()就和普通的成员方法一样,可以被重复调用 ...
- 详解java中Thread类,线程和进程的基本区别,多线程的好处,线程的五个生命周期,主线程和IDEA创建的Monitor Ctrl-Break守护线程;优雅地终止线程。死锁的产生
线程:CPU调度的最小单位:线程共享堆内存和方法区,但各自享有栈空间.进程:CPU分配资源的最小单位. 为什么需要多线程:①避免其中一个模块阻塞造成系统假死:②程序异步处理(交替执行),提高程序执行效 ...
- Java中Objects类的方法介绍(已更新)
使用软件:eclipse 2019-2 jdk:11 首先,Objects类是属于Java的工具类,具体包的位置是java.Util.Objects.它是在jdk1.7版本中添加的一些用来检查的工具, ...
- Java中Thread类的详解
Thread(多线程类) 多线程 进程: 通俗的来说,每一个程序都是一个进程,比如:QQ,360,谷歌. 线程: 每一个程序中都有多个功能,每一个功能都可以看成是一个线程. Thread的使用 继承子 ...
- java中thread类定义在哪个包中,Thread类位于下列哪个包中?()A、javA、ioB、javA、langC、j......
System和Math类在哪个包中_______.A.java.ioB.java.langC.java.awtD.java.util ObjectInputStream和ObjectOutputStr ...
最新文章
- linux常用的命令行
- python文件读取输出-Python 读取和输出到txt
- 王爽汇编语言C硬盘读写,王爽汇编语言学习笔记(范文).doc
- 文本光标,高亮选中一些出来
- NuGet Error:Unable to find version ‘0.3.3.0‘ of package ‘glog.overlay-x64_v120_Release_dynamic‘.
- 2019.8.21页面功能的实现
- wpf中内容包含在border中_Excel中创建包含注释的数学公式
- LeetCode-2: Add Two Numbers
- 推荐一款很好的unity录屏插件
- 【ExtJs】Extjs RowNumberer序号分页递增
- 乐回购服务器异常等待修复,楚留香4.26立夏集活动玩法大全 聚沙成塔春尽雅集拄食兆吉奇趣斗蛋张榜升擂迎夏祈福莲舫觅珍曲水台_游侠手游...
- c#chart控件代码详解
- PTAM算法流程介绍
- 【Java 8 新特性】Java CompletableFuture thenApply()
- UI设计 ,我只推荐这6个网站,真的太好用了。
- 操作系统中cpu如何工作
- 如何在ex表格导入php_怎么使用php把表格中的数据导入到excel中,php如何快速导入excel表格数据...
- 伊豆:把豆瓣网装进口袋
- 旧电脑又卡有慢,一招设置电脑最佳性能
- 原生小程序 之引入 icon字体图标