一、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方法的更多相关文章

  1. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  2. 【强烈推荐】可能是最适合你的 Java 学习路线和方法

    如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...

  3. 0019 Java学习笔记-面向对象-方法

    方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...

  4. java学习笔记-Thread

    java定义了创建线程的两种方法 1.实现Runnable接口 2.扩展Thread类本身 1.实现Runnable接口: 可以依托任何Runnable接口的对象来创建线程.但是为了实现Runnabl ...

  5. Java学习总结之方法重载和方法重写

    在学习方法的阶段我学习了方法重载(Overload),而在学习面向对象三大特性之继承的时候我又学习了方法重写(Override).   概念: 方法重载:在同一个类中,允许存在一个以上的同名方法,只要 ...

  6. Java学习笔记之方法重载,动态方法调度和抽象类

    一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...

  7. 【原】Java学习笔记008 - 方法(函数)

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 方法/函数 Met ...

  8. Java 学习笔记之 方法内的临时变量是线程安全

    方法内的临时变量是线程安全: 方法内部的私有变量,是线程安全的. public class HasSelfPrivateNum { public void addI(String username) ...

  9. Java学习笔记之方法重载

    被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...

随机推荐

  1. JavaScript高级程序设计(第3版) 第三章 (基本概念)

    3.1 语法 1.不以数字开头的数字,字母,下划线,美元符号 2.注释:html <!-- --> css/**/ js单行// 多行/**/ 3.ES5 引入了严格模式(strict m ...

  2. 推荐一个 Java 里面比较牛逼的公众号!

    今天给大家推荐一个牛逼的纯 Java 技术公众号:Java技术栈,作者:栈长. Java程序员.Java爱好者扫码关注吧! 确实牛逼,几十万人关注了,原创文章350+,好友都 3000+ 关注了. 栈 ...

  3. shuoj 1 + 2 = 3? (二分+数位dp)

    题目传送门 1 + 2 = 3? 发布时间: 2018年4月15日 22:46   最后更新: 2018年4月15日 23:25   时间限制: 1000ms   内存限制: 128M 描述 埃森哲是 ...

  4. python学习第八天二进制和字符编码有关联

    计算机所能识别只有0,1这两种状态,但是我们人类用字母,汉字,还有其他语言,那么怎么和计算机进行沟通呢,python编程语言最早unicode,现在统一用utf8,UTF8通用的编码语言,所有语言都包 ...

  5. Spring Data Redis实战之提供RedisTemplate

    参考: http://www.cnblogs.com/edwinchen/p/3816938.html 本项目创建的是Maven项目 一.pom.xml引入dependencies <depen ...

  6. differential evolution代码实例(DE算法)

    DE算法是遗传算法中一种比较流行的算法,这种算法比较简单,速度也比较快,下面给出一份示例代码 clear all; close all; clc 2 %Function to be minimized ...

  7. tensorflow创建cnn网络进行中文手写文字识别

    数据集下载地址:http://www.nlpr.ia.ac.cn/databases/handwriting/download.html chinese_write_detection.py # -* ...

  8. 2018-8-10-win10-uwp-MetroLog-入门

    title author date CreateTime categories win10 uwp MetroLog 入门 lindexi 2018-08-10 19:16:53 +0800 2018 ...

  9. 微信小程序(16)-- bindtap,catchtap事件绑定的区别

    bindtap,catchtap事件绑定的区别,这里就涉及冒泡事件了.bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡. logs.wxml <view cl ...

  10. poland 波兰 时区

    http://www.timeofdate.com/country/Poland 2019年 ~ 2020年波兰夏令时开始结束时间 年份 日期 类型 2019 2019-3-31 夏令时开始   20 ...