Java学习之Thread方法
一、sleep()方法:在同步中,释放CPU执行权,不释放同步锁,意味着程序停止
二、停止线程方法:原理:run执行完成
1、设置标记
class StopThread implements Runnable
{
private boolean flag=true;
public void run()
{
while(flag)
{
System.out.println(Thread.currentThread().getName());
} }
public void setFlag()
{
this.flag=false;
}
} class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st=new StopThread(); Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t2.start(); int num = 1;
for(;;)
{
if(++num==50)
{
st.setFlag();
break;
}
System.out.println(Thread.currentThread().getName()+";;;;"+num);
}
System.out.println("over");
}
}
2、interrupe方法:在同步线程中,把冻结状态的线程,强制恢复到运行状态,让其获取CPU执行资格
/**
停止线程方法
1、run方法执行完成
2、设置标记
3、interrupt()方法
4、setDaemon() */ //
class StopThread implements Runnable
{
private boolean flag=true;
public void run()
{
while(flag)
{
show();
} } private synchronized void show()
{
try{this.wait();}catch(InterruptedException e){this.flag=false;}
System.out.println(Thread.currentThread().getName());
} public void setFlag()
{
this.flag=false;
}
} class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st=new StopThread(); Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t2.start(); int num = 1;
for(;;)
{
if(++num==50)
{
//st.setFlag();
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+";;;;"+num);
}
System.out.println("over");
}
}
3、setDaemon(true):设置守护线程,后台线程
class StopThread implements Runnable
{
private boolean flag=true;
public void run()
{
while(flag)
{
show();
} } private synchronized void show()
{
try{this.wait();}catch(InterruptedException e){this.flag=false;}
System.out.println(Thread.currentThread().getName());
} public void setFlag()
{
this.flag=false;
}
} class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st=new StopThread(); Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t2.setDaemon(true);
t2.start(); int num = 1;
for(;;)
{
if(++num==50)
{
//st.setFlag();
t1.interrupt();
//t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+";;;;"+num);
}
System.out.println("over");
}
}
所有非后台线程都执行完成,后台现在无论处于什么状态都会退出。
三、join方法
class Demo implements Runnable
{
public void run()
{
for(int x=0;x<50;x++)
{
System.out.println(Thread.currentThread().getName()+"...."+x);
}
}
} //将执行join()方法的线程终止,释放其CPU执行权和执行资格,等待join()方法所属的线程执行完成后,才能重新获取CPU执行资格
class JoinDemo
{
public static void main(String[] args)throws Exception
{
Demo st=new Demo(); Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t1.join(); //main 线程终止,等待t1线程执行完成才继续执行。
t2.start();
//t1.join();//main 线程终止,t1和t2抢夺CPU执行权,main线程等待t1线程执行完成才继续执行。
for(int x=0;x<50;x++)
{
System.out.println(Thread.currentThread().getName()+"...."+x);
}
System.out.println("over");
}
}
四、yield方法
class Demo implements Runnable
{
public void run()
{
for(int i=0;x<50;x++)
{
System.out.println(Thread.currentThread().getName()+"...."+x);
Thread.yield();//释放CPU执行权,注意:释放CPU执行权,不代表它自己不能再次获取CPU执行权
}
}
}
Java学习之Thread方法的更多相关文章
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- 【强烈推荐】可能是最适合你的 Java 学习路线和方法
如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...
- 0019 Java学习笔记-面向对象-方法
方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...
- java学习笔记-Thread
java定义了创建线程的两种方法 1.实现Runnable接口 2.扩展Thread类本身 1.实现Runnable接口: 可以依托任何Runnable接口的对象来创建线程.但是为了实现Runnabl ...
- Java学习总结之方法重载和方法重写
在学习方法的阶段我学习了方法重载(Overload),而在学习面向对象三大特性之继承的时候我又学习了方法重写(Override). 概念: 方法重载:在同一个类中,允许存在一个以上的同名方法,只要 ...
- Java学习笔记之方法重载,动态方法调度和抽象类
一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...
- 【原】Java学习笔记008 - 方法(函数)
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 方法/函数 Met ...
- Java 学习笔记之 方法内的临时变量是线程安全
方法内的临时变量是线程安全: 方法内部的私有变量,是线程安全的. public class HasSelfPrivateNum { public void addI(String username) ...
- Java学习笔记之方法重载
被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...
随机推荐
- JavaScript高级程序设计(第3版) 第三章 (基本概念)
3.1 语法 1.不以数字开头的数字,字母,下划线,美元符号 2.注释:html <!-- --> css/**/ js单行// 多行/**/ 3.ES5 引入了严格模式(strict m ...
- 推荐一个 Java 里面比较牛逼的公众号!
今天给大家推荐一个牛逼的纯 Java 技术公众号:Java技术栈,作者:栈长. Java程序员.Java爱好者扫码关注吧! 确实牛逼,几十万人关注了,原创文章350+,好友都 3000+ 关注了. 栈 ...
- shuoj 1 + 2 = 3? (二分+数位dp)
题目传送门 1 + 2 = 3? 发布时间: 2018年4月15日 22:46 最后更新: 2018年4月15日 23:25 时间限制: 1000ms 内存限制: 128M 描述 埃森哲是 ...
- python学习第八天二进制和字符编码有关联
计算机所能识别只有0,1这两种状态,但是我们人类用字母,汉字,还有其他语言,那么怎么和计算机进行沟通呢,python编程语言最早unicode,现在统一用utf8,UTF8通用的编码语言,所有语言都包 ...
- Spring Data Redis实战之提供RedisTemplate
参考: http://www.cnblogs.com/edwinchen/p/3816938.html 本项目创建的是Maven项目 一.pom.xml引入dependencies <depen ...
- differential evolution代码实例(DE算法)
DE算法是遗传算法中一种比较流行的算法,这种算法比较简单,速度也比较快,下面给出一份示例代码 clear all; close all; clc 2 %Function to be minimized ...
- tensorflow创建cnn网络进行中文手写文字识别
数据集下载地址:http://www.nlpr.ia.ac.cn/databases/handwriting/download.html chinese_write_detection.py # -* ...
- 2018-8-10-win10-uwp-MetroLog-入门
title author date CreateTime categories win10 uwp MetroLog 入门 lindexi 2018-08-10 19:16:53 +0800 2018 ...
- 微信小程序(16)-- bindtap,catchtap事件绑定的区别
bindtap,catchtap事件绑定的区别,这里就涉及冒泡事件了.bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡. logs.wxml <view cl ...
- poland 波兰 时区
http://www.timeofdate.com/country/Poland 2019年 ~ 2020年波兰夏令时开始结束时间 年份 日期 类型 2019 2019-3-31 夏令时开始 20 ...