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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 本地化配置

2019独角兽企业重金招聘Python工程师标准>>> 最近使用svn更新的时候经常出现一些奇怪的错误。经过查询得知是本地化环境没有配置,导致的。记录以下解决方法。 本人环境:centos 5.x 错误现象: [Copy to clipboard]View Code ERRORs…

MySQL连接查询

1.分类 MySQL连接可以分为: 1)内连接 2)外连接 左外连接右外连接全外连接 3)自然连接 自然内连接(NATURAL JOIN)自然左外连接(NATURAL LEFT JOIN)自然右外连接(NATURAL RIGHT JOIN) 4)交叉连接 2.语法 SELECT…

IP编址(包括网络地址和广播地址)

1.总述 IP地址使用32位二进数表示,每一个主机或路由器的接口都有全局唯一的IP地址(NAT是个例外),它由网络号(NetID)和主机号(HostID)组成,它可以分为五类,如下: 2.地址划分 1)A…

JSP中 input type 用法

JSP中 input type 用法 Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍。 1,typetext 输入类型是text,这是我们…

java box unboxing

http://www.java2s.com/Tutorial/Java/0040__Data-Type/BoxingandUnboxing.htmBoxing and Unboxing1、Boxing refers to the conversion of a primitive to a corresponding wrapper instance, such as from an int toa java.lang.Integer. 2、Unboxing is the conversion of a…

Java的可重入锁

1.可重入锁Lock 锁主要是为了保护临界区资源,防止由于并发执行而引起的数据异常。而synchronized关键字就是一种最简单的控制方法。经过jdk1.6对synchronized的优化,Lock和synchronized的性能相差并不多。 那么为什么还需要Lock,这当然有它的…

创建oracle 数据库表空间,角色,用户的sql语句

创建oracle 数据库表空间,角色,用户的sql语句 1.创建角色 CREATE ROLE "QIUDINGROLE" NOT IDENTIFIED; GRANT "CONNECT" TO "QIUDINGROLE";GRANT "DBA" TO "QIUDINGROLE";GRANT "RESOURCE"…

JBoss5开发web service常见问题

最近在研究EJB3,在使用EJB3的Web service的时候遇到了不少棘手的问题,现在总结常见问题与大家分享,希望您能少浪费些时间去漫天地搜解决方案,具体见下: 1.服务器端错误信息:jboss5 java.lang.NoClassDefFou…

面试题:谈谈你对TCP的认识

一 TCP 1. 简介 首先,TCP是一个传输层协议,提供进程到进程之间的可靠性数据传输服务,还提供流量控制和差错控制等机制。 其次,TCP是面向连接的,其通信模式是全双工的;面向连接是指: 在发送数…

WCF Data Services 基础

把最近使用的WCF Data Service和WCF RIA Service的使用例子发布在站点http://dskit.codeplex.com , 本系列文章就把WCF Data Service和WCF RIA Service涉及的主要方面描述一下,希望通过这些内容,可以比较顺畅的把这些框架使用起来&#xff0c…

面试题:MySQL的innodb和myisam

一 Innodb 1. 简介 索引是一种排好序的用于快速查找的数据结构。 **根据官网手册InnoDB支持B-tree索引、聚簇索引(Clustered indexes)、全文索引(Full-text search indexes)、不支持hash索引(InnoDB在内部利用哈希索引来实现其自适应哈希索引功能&#xff09…

用Markup Validation Service进行网页的W3C标准语法验证(c#)

W3C提供免费的Markup Validation Service,这是一个可以验证Html/XHtml文档的语法规范的公共服务。在某种程度上,有了它,我们再也不用为不能全面及时检测众多浏览器和五花八门的js/css不兼容性而痛不欲生了。^-^。 使用方法很简单,…

为什么MySQL索引更适合B+树而不是二叉树、B树

一 数据库为什么使用B树 1. 与二叉树相比 二叉树相比于顺序查找的确减少了查找次数,但是在最坏情况下,二叉树有可能退化为顺序查找。而且就二叉树本身来说,当数据库的数据量特别大时,其层数也将特别大。二叉树的高度一般是log_2…

SIP 電話

下載转载于:https://www.cnblogs.com/kevinsun/archive/2010/10/18/1854021.html

【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除

根据新浪报道,据新华社10月14日电 利用当网管的机会,破解密码,非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露,当地某公司员工程尚军因涉嫌破坏计算机信息系统罪,已于10月初被依…

将Java应用程序本地编译为EXE的几种方法

将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)  1. 从[url]www.towerj.com[/url]获得一个TowerJ编译器,该编译器可以将你的CLASS文件  编译成EXE文件。  2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以  从微软…

MDOP套装之app-v安装使用及功能说明

最近尝试了瑞友天翼的虚拟化产品,感觉还不错,正好手上又下载了个mdop套装,顺手做了个app-v实验,其他实验教程后期继续推出。 一、服务端的安装 二、排序工具的安装 三、客户端的安装 四、使用排序工具虚拟化一个程序 五、发布虚…

奇虎360大战腾讯QQ 高潮迭起用户受伤

原文地址:奇虎360大战腾讯QQ 高潮迭起用户受伤 虽然我也是不可避免的QQ用户,但是自从360开始揭露腾讯QQ涉及扫描用户隐私引发的这场高潮迭起的比拼谁更淫荡谁更无耻的战争中,我心中的一碗水一直端的很平,就像对待小泽和空姐的作品…

容器技术之Dockerk8s知识笔记

本文带你快速了解Kubernetes与Docker 让你对容器与虚拟机的区别、Docker与k8s有一个快速的了解 目录 演变史容器与虚拟机的区别K8S与Docker概念DockerK8S演变史 传统部署时代: 早期,将单一的应用服务运行在物理服务器上,无法给服务器的应用…

容器技术之kubectl常用命令

kubectl用于运行Kubernetes集群命令的管理工具。本文概述涵盖了kubectl语法,对命令操作的描述,并列举了常用命令。 Kubectl命令详细列表请查看:Kubernetes kubectl 命令表 语法 $ kubectl [command] [TYPE] [NAME] [flags] command&#x…