JAVA学习笔记50——线程状态+停止进程+阻塞进程
来源:互联网 发布:南昌有mac专柜吗 编辑:程序博客网 时间:2024/05/22 15:25
最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇介绍三大部分内容,首先来看第一部分:线程的状态
下图是线程状态的转换图:
线程各个状态的具体介绍以及在JAVA中的使用方法:
第二个内容是介绍线程的停止:
1、自然终止:线程体正常执行完毕
2、外部干涉:
1)、线程类中 定义 线程体使用的标识
2)、线程体使用该标识
3)、提供对外的方法改变该标识
4)、外部根据条件调用该方法即可
下面是实例代码:public class StopDemo01 {public static void main(String[] args) {Study s =new Study();new Thread(s).start(); //使用匿名类//外部干涉for(int i=0;i<100;i++){if(50==i){ //外部干涉s.stop();}System.out.println("main.....-->"+i);}}}class Study implements Runnable{ //1)、线程类中 定义 线程体使用的标识 private boolean flag =true;@Overridepublic void run() {//2)、线程体使用该标识while(flag){System.out.println("study thread....");}}//3)、对外提供方法改变标识public void stop(){this.flag =false;}}第三个内容是线程的阻塞:
1、join :合并线程
2、yield:暂停自己的线程 static
3、sleep:休眠,不释放锁
1)、与时间相关:倒计时
2)、模拟网络延时
NO.1:合并进程的示例代码:/** * join:合并线程 */public class JoinDemo01 extends Thread {/** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {JoinDemo01 demo = new JoinDemo01();Thread t = new Thread(demo); //新生t.start();//就绪//cpu调度 运行for(int i=0;i<1000;i++){if(50==i){t.join(); //main方法阻塞...,50之后就只会进行run的,run的结束后再执行main的}System.out.println("main...."+i);}}@Overridepublic void run() {for(int i=0;i<1000;i++){System.out.println("join...."+i);}}}NO.2:yield的示例代码:
public class YieldDemo01 extends Thread {public static void main(String[] args) {YieldDemo01 demo = new YieldDemo01();Thread t = new Thread(demo); //新生t.start();//就绪//cpu调度 运行for(int i=0;i<1000;i++){if(i%20==0){//暂停本线程 main(规则:写在哪个方法里面就暂停哪个方法)Thread.yield();}System.out.println("main...."+i);}}@Overridepublic void run() {for(int i=0;i<1000;i++){System.out.println("yield...."+i);}}}NO.3:sleep的两段示例代码:
import java.text.SimpleDateFormat;import java.util.Date;/** * 倒计时 * 1、倒数10个数,一秒内打印一个 * 2、倒计时 */public class SleepDemo01 {/** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {Date endTime =new Date(System.currentTimeMillis()+10*1000);long end =endTime.getTime();while(true){//输出System.out.println(new SimpleDateFormat("mm:ss").format(endTime));//等待一秒Thread.sleep(1000);//构建下一秒时间endTime =new Date(endTime.getTime()-1000);//10秒以内 继续 否则 退出if(end-10000>endTime.getTime()){break;}}}public static void test1() throws InterruptedException{int num =10;while(true){System.out.println(num--);Thread.sleep(1000); //暂停if(num<=0){break;}}}}
/** * Sleep模拟 网络延时 线程不安全的类 * */public class SleepDemo02 {/** * @param args */public static void main(String[] args) {//真实角色Web12306 web= new Web12306();Web12306 web2 = new Web12306();//代理Thread t1 =new Thread(web,"路人甲");Thread t2 =new Thread(web,"黄牛已");Thread t3 =new Thread(web,"攻城师");//启动线程t1.start();t2.start();t3.start();}}class Web12306 implements Runnable {private int num =50;@Overridepublic void run() {while(true){if(num<=0){break; //跳出循环}try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"抢到了"+num--);}}}到这片博客满50篇了,也达到了寒假的计划要求···
0 0
- JAVA学习笔记50——线程状态+停止进程+阻塞进程
- Java线程状态、线程停止、线程阻塞
- Java线程状态、线程停止、线程阻塞
- java-学习笔记-线程&进程
- JAVA学习笔记49——线程概念+进程、线程区别+创建进程三种方法
- Java多线程学习笔记—线程停止
- <JAVA学习笔记4>——进程、线程简单介绍
- java学习笔记-线程和进程-黑马
- Java学习笔记3-进程与线程
- Java学习笔记之进程和线程
- 03-java学习笔记【进程与线程】
- Linux进程操作——Linux进程线程学习笔记:进程控制
- java多线程学习笔记(八) ——线程停止(interrupt)
- 操作系统学习笔记——进程的状态
- java 进程 线程 线程状态转换
- Linux进程线程学习笔记:进程创建
- Linux进程线程学习笔记:进程创建
- Linux进程线程学习笔记:进程创建
- centos6安装mongodb
- linux安装httpsqs插件
- ssh框架向数据库添加blob图片以及在jsp中显示blob图片
- 自己动手实现TODO的宏
- 数据库乱码问题 & Python 编码问题(Unicode 的 encode、decode 相互转换 )
- JAVA学习笔记50——线程状态+停止进程+阻塞进程
- attempt to dismiss modal view controller
- Combobox显示值、实际值
- Windows系统命令
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view
- 解决android3.0版本以上应用接收不到开机广播问题
- 学习高斯消元
- PCA
- LinearLayout和RelativeLayout 比较