Java——线程的四种不同形式

一,休眠线程

public static void sleep(long millis) throws InterruptedException

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。

参数:millis - 以毫秒为单位的休眠时间。

抛出:InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。

package com.yy.threadmethod;public class Demo3_Sleep {
/*** *当父亲坏了,那么,儿子不能比父亲更坏*当父亲没坏,儿子如果有坏的东西,必须自己去处理* * public static void sleep(long millis)*                  throws InterruptedException在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。 ** 参数:millis - 以毫秒为单位的休眠时间。 * 抛出:InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。* * */public static void main(String[] args) throws InterruptedException {demo1();                                //创建一条线程,对其进行睡眠,使其每秒打印一次demo2();                                //创建两条线程,分别进行睡眠,让两条线程交替输出}private static void demo2() {new Thread(){                               //父类Thread类里面的run方法是没有throw抛异常的,子类在重写父类的方法的时候,就不能去抛异常,这里只能抓异常surroundpublic void run(){for (int i = 0; i < 10; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName() + "......aaaaaa");}}}.start();//开启一条线程new Thread(){public void run(){for (int i = 0; i < 10; i++) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName() + "......bbbb");}}}.start();//开启另一条线程
}private static void demo1() throws InterruptedException {for (int i = 20; i >= 0; i--) {System.out.println("倒计时:" + i + "秒");Thread.sleep(100);}}}

二,守护线程

守护线程:设置一个线程为守护线程,该线程不会单独执行,当其他的非守护线程都结束后,自动退出,退出的时候会有一定的缓冲时间,不会立马就结束;

public final void setDaemon(boolean on)

将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。

参数:on - 如果为 true,则将该线程标记为守护线程。

被标记成守护线程的线程,相当于象棋里的車马象士,而没被标记为守护线程的线程,相当与将帅。
package com.yy.threadmethod;public class Demo4_Daemon {
/*** 守护线程* 设置一个线程为守护线程,该线程不会单独执行,当其他的非守护线程都结束后,自动退出,退出的时候会有一定的缓冲时间,不会立马就结束* * */public static void main(String[] args) {Thread t1 = new Thread(){               //匿名内部类public void run(){                  //重写run()方法for (int i = 0; i < 2; i++) {System.out.println(getName() + "...wsq" );} }};Thread t2 = new Thread(){public void run(){for (int i = 0; i < 50; i++) {System.out.println(getName() + "...yy" );} }};t2.setDaemon(true);                     //当传入true就是意味着设置为守护线程,把t2设置成守护线程,相当于象棋中的車马象士,去守护t1,ti就相当于是将帅’t1.start();t2.start();}}

三,加入线程

join():当前线程暂停,等待指定的线程执行结束之后,当前线程再继续

join(int):join()的一个重载方法,可以等待指定的毫秒之后继续

  • public final void join()
    throws InterruptedException等待该线程终止。
  • 抛出:
    InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。

  • public final void join(long millis,int nanos)
    throws InterruptedException等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。

  • 参数:
    millis - 以毫秒为单位的等待时间。
    nanos - 要等待的 0-999999 附加纳秒。
  • 抛出:
    IllegalArgumentException - 如果 millis 值为负,则 nanos 的值不在 0-999999 范围内。
    InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。
package com.yy.threadmethod;public class Demo5_Join {public static void main(String[] args) {final Thread t1 = new Thread(){             //匿名内部类(局部内部类)在使用它所在方法中的局部变量的时候,必须用final修饰public void run(){for (int i = 0; i < 10; i++) {System.out.println(getName() + "..." + "海阔天空");}}};Thread t2 = new Thread(){public void run(){for (int i = 0; i < 10; i++) {if(i == 2){                     //当i=2时,也就是t2执行两次之后,t1线程开始插队try {
//                          t1.join();              //这表示t1线程开始插队,然后,直到t1线程运行完毕后,才轮到t2线程运行t1.join(1);             //这表示t1线程插队,插队1毫秒之后,两条线程继续交替进行,也就是继续多线程进行} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(getName() + "..." + "光辉岁月");}}};t1.start();t2.start();}}

四,礼让线程

yield:礼让线程,让出CPU

public static void yield() 暂停当前正在执行的线程对象,并执行其他线程。

package com.yy.threadmethod;public class Demo6_Yield {public static void main(String[] args) {new MyThread().start();                     //定义一条线程        new MyThread().start();                     //定义另一条线程}
}class MyThread extends Thread{public void run(){for (int i = 1; i <= 1000; i++) {       if(i % 10 == 0){                        //若i是10的倍数Thread.yield();                     //让出CPU,让另一条线程进行}System.out.println(getName() + "..." + i);}}
}

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

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

相关文章

hdu1053 Entropy hdu2527 Safe Or Unsafe

裸裸的哈弗曼编码&#xff0c;求出哈弗曼编码的路径长度&#xff0c;注意整个字符串为一种字符的情况 View Code #include<iostream>#include<queue>#include<algorithm>#include<vector>using namespace std;struct node{int u,w; node(int a0,in…

Java ListResourceBundle getContents()方法与示例

ListResourceBundle类的getContents()方法 (ListResourceBundle Class getContents() method) getContents() method is available in java.util package. getContents()方法在java.util包中可用。 getContents() method is used to get the contents into the form of an Obje…

DOM元素的所有子元素 .elements

.elements属性用来获取某个DOM元素的所有子元素&#xff0c;是个很有用的属性&#xff0c;可用于用className来获取指定元素等用途。 转载于:https://www.cnblogs.com/cly84920/archive/2008/08/06/4427136.html

sys.stdin.read和raw_input函数

sys.stdin.read函数 例子&#xff1a; import sysreadsys.stdin.read() for i in range(len(read)):print i,read[i],-1运行&#xff0c;当执行到readsys.stdin.read()会阻塞&#xff0c;等待我们输入 我们输入&#xff1a; h e当输入&#xff0c;ctrlD结束输入&#xff0c…

Java ObjectOutputStream writeFields()方法与示例

ObjectOutputStream类writeFields()方法 (ObjectOutputStream Class writeFields() method) writeFields() method is available in java.io package. 在java.io包中提供了writeFields()方法 。 writeFields() method is used to write the buffered fields to the ObjectOutpu…

利用带关联子查询Update语句更新数据

Update是T-sql中再简单不过的语句了&#xff0c;update table set columnexpression [where condition]&#xff0c;我们都会用到。但update的用法不仅于此&#xff0c;真正在开发的时候&#xff0c;灵活恰当地使用update可以达到事半功倍的效果。 假定有表Table1&#xff08;…

SQL Server 2000数据库移植到SQL Server 2008R2数据库服务器中碰到的”3145错误”及解决办法...

辛苦忙碌了一个星期终于安装配置好了TFS服务器&#xff0c;给每个团队成员分配了账户和邮箱。不过&#xff0c;老机器中的部分数据需要备份到新机器中&#xff0c;其中在移植一个使用DVBBS架设的论坛的时候&#xff0c;出了点问题&#xff0c;记录如下&#xff0c;以备查找&…

web安全----XSS漏洞之基本原理

0x01 概述 XSS为跨站脚本攻击&#xff0c;XSS攻击针对的是用户层面的攻击&#xff01;类型有反射型XSS、存储型XSS、DOM型XSS&#xff0c;这里的DOM可以理解为页面&#xff0c;或者是所有的标签、内容之和 0x02 反射型XSS 反射型XSS攻击流程为&#xff1a; 即&#xff1a; …

面向对象(匿名内部类与有名字内部类的比较)

A:匿名内部类 就是内部类的简化写法B:前提 这里的类可以是具体类也可以是抽象类C&#xff1a;格式 new 类名或者接口(){ //表示继承这个类或实现这个接口重写方法}D&#xff1a;本质是什么呢&#xff1f; 是一个继承了该类或者实现了该接口的子类匿名对象E&#xff1a;案…

如何在Python中针对一个值检查多个变量?

Given multiple variables and they are assigned some values, we have to test a value with these variables. 给定多个变量并为其分配了一些值&#xff0c;我们必须使用这些变量测试一个值。 Let, there are three variables a, b and c and we have to check whether one…

品析《桃花庵歌》

桃花庵歌 【明】唐寅&#xff08;YIN) 桃花坞里桃花庵&#xff0c;桃花庵下桃花仙&#xff1b; 桃花仙人种桃树&#xff0c;又摘桃花卖酒钱。 酒醒只在花前坐&#xff0c;酒醉还来花下眠&#xff1b; 半醒半醉日复日&#xff0c;花落花开年复年。 但愿老死花酒间&#xf…

面向对象(匿名内部类重写多个方法调用)

①匿名内部类只针对重写一个方法的时候使用; ②若有多个方法&#xff0c;通过匿名内部类进行调用的时候&#xff0c;需要一个一个进行调用,比较麻烦&#xff0c;所以不建议使用。 ③匿名内部类是无法向下转型的&#xff0c;向下转型需要子类的类名&#xff0c;这里面没有子类…

c++ 取两个链表的交集_使用C ++程序查找两个链表的交集

c 取两个链表的交集Problem statement: Write a C program to find the intersection of two single linked lists. 问题陈述&#xff1a;编写一个C 程序来查找两个单个链表的交集。 Example: 例&#xff1a; Let the first linked list be:6->5->2->9->NULLLet …

只在IE中显示

只在IE中显示div{display:none;display:block;_display:block}转载于:https://www.cnblogs.com/lishenglyx/archive/2008/08/21/1273089.html

web安全---XSS漏洞之标签使用2

所有标签已经测试完并可以使用&#xff0c;测试环境&#xff1a;DVWA的反射型XSS&#xff0c;等级low 0x01 <script>标签 <script>alert(2)</script> <script>alert(2)</script//0x02 <img>标签 <img src"x" onerroralert(1)…

Java——多线程(铁路售票系统案例)

问题&#xff1a;铁路售票&#xff0c;一共100张&#xff0c;通过四个窗口卖完。 要求&#xff1a;分别用 继承Thread类 和 实现Runnable接口 去实现 ①用继承Thread类去实现 package com.yy.syn;public class Demo3_Ticket { /*** 铁路售票&#xff0c;一共100张&#xff…

Java LocalDateTime类| 带示例的getDayOfWeek()方法

LocalDateTime类getDayOfWeek()方法 (LocalDateTime Class getDayOfWeek() method) getDayOfWeek() method is available in java.time package. getDayOfWeek()方法在java.time包中可用。 getDayOfWeek() method is used to get the field value day-of-week that is an enum …

软件测试方法大汇总

软件测试方法大汇总 软件测试方法种类繁多&#xff0c;记忆起来混乱&#xff0c; 如果把软件测试方法进行分类, 就会清晰很多。 我参考一些书籍和网上的资料&#xff0c; 把常用的软件测试方法列出来&#xff0c; 让大家对软件测试行业有个总体的看法。 从测试设计方法分类 测试…

web安全----xss工具使用3

XSSer 0x01 安装 环境&#xff1a;kali、python3&#xff08;必须是python3&#xff0c;kali默认为python2&#xff09; 安装步骤&#xff1a; git clone https://github.com/epsylon/xsser.git cd xsser sudo python3 setup.py install 使用命令&#xff1a; xsser -h查看…

Java——多线程(死锁)

死锁是指&#xff1a;两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进程称为死锁进…