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 ...
随机推荐
- 炫酷CSS3加载动画
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8&qu ...
- spring boot 控制 序列化格式
@PostMapping(path = "/register", produces={MediaType.APPLICATION_JSON_VALUE, MediaType.TEX ...
- 次小生成树(Prim + Kruaskal)
问题引入: 我们先来回想一下生成树是如何定义的,生成树就是用n - 1条边将图中的所有n个顶点都连通为一个连通分量,这样的边连成子树称为生成树. 最小生成树很明显就是生成树中权值最小的生成树,那么我们 ...
- 实现自己的DiscoveryClient
需要做的: DiscoveryClient能提供那些服务的服务名列表 返回指定服务对于的ServiceInstance列表 返回DiscoveryClient的顺序 返回HealthIndicator ...
- Codeforces - 1191C - Tokitsukaze and Discard Items - 模拟
https://codeforces.com/contest/1191/problem/C 一开始想象了一下,既然每次删除都是往前面靠,那么好像就是页数*页容量+空位数=最多容纳到的坐标. 至于为什么 ...
- javascript判断chrome浏览器的方法
var isChrome = window.navigator.userAgent.indexOf("Chrome") !== -1; if (isChrome) { alert( ...
- ASP.NET CORE 2.0 模板 (Admin LTE)
原文:https://www.jianshu.com/p/4916f380be66?utm_campaign=hugo&utm_medium=reader_share&utm_cont ...
- .ef core 多对对关系的关联方法
最近在用.net core 重构博客,在使用ef core连表查询时,遇到了一些问题.记录一下. 关系:一个博客可以有多个标签,一个标签可以属于多个博客,博客和标签之间存在多对多的关系 下面是实体代码 ...
- OC学习--继承
1.什么是继承? 继承是指一个对象直接使用另一对象的属性和方法. 继承可以使得子类具有父类的各种属性和方法,而不是再次编写相同的代码.在子类继承父类的同时,可以重新定义某些属性,并重写某些方法, 即 ...
- 265-Keystone II JESD204B 66AK2L06 评估模块 (现行) XEVMK2LX
Keystone II JESD204B 66AK2L06 评估模块 (现行) XEVMK2LX 一. 板卡概述The XEVMK 2LX is a full-featured evaluation ...