zoukankan      html  css  js  c++  java
  • 2.线程之状态

    一、线程的状态有5种:

      新生状态   就绪状态  运行状态  阻塞状态  死亡状态

    二、线程的停止(重点

     1,自然终止:线程体执行完毕
     2,外部干涉:
      1>,线程体类 定义 线程体使用的标识
      2>,线程体中使用该标识
      3>,提供对外的方法改变该标识
      4>,外部根据条件调用该方法

    代码实现:

    package com.cust.status;
    /**
     * 描述:线程的终止:
     *     1,自然终止:线程体执行完毕
     *     2,外部干涉:
     *     	   1>,线程体类 定义 线程体使用的标识
     *         2>,线程体中使用该标识
     *         3>,提供对外的方法改变该标识
     *         4>,外部根据条件调用该方法
     * @author cookie
     */
    public class StopDemo implements Runnable{
    	private boolean flag = true;//定义标识
    	private int num=0;
    	@Override
    	public void run() {
    		while(flag){//使用标识
    			System.out.println("stop--->"+num++);
    		}
    	}
    	public void stop(){	//对外提供改变标识的方法
    		this.flag = false;
    	}
    	public static void main(String[] args) {
    		StopDemo s = new StopDemo();
    		new Thread(s).start();
    		for(int i = 0; i < 100; i++){
    			if(i==50){
    				s.stop();//外部调用
    			}
    			System.out.println("main----->"+i);
    		}
    	}
    }
    

      二、线程的阻塞

    • join:合并线程 c.join(); //等待c先执行
    • yield: static 暂停当前正在执行的线程,先让别的线程执行

           Thread.yield();//谁的内部调用谁暂停

    • sleep: static 睡眠 不释放锁 Thread.sleep();

         与时间相关:倒计时

         模拟网络延时,并发 --->Web12306

    join代码实现(yield类似):

    package com.cust.status;
    /**
     * 描述:线程阻塞
     * join:合并线程 t.join();//先将t执行完毕
     * yield:暂停自己的线程,谁调用谁暂停Thread.yield
     * 
     * @author cookie
     */
    public class JoinDemo extends Thread{
    	@Override
    	public void run() {
    		for (int i = 0; i < 1000; i++) {
    			System.out.println("join---->"+i);
    		}
    	}
    	public static void main(String[] args) throws InterruptedException {
    		JoinDemo demo = new JoinDemo();
    		Thread t = new Thread(demo);
    		t.start();
    		//cpu调度执行
    		for (int i = 0; i <100; i++) {
    			if(50==i){
    				t.join();//main方法阻塞
    			}
    			System.out.println("main---->"+i);
    		}
    		
    	}
    }
    

      sleep倒计时:

    package com.cust.status;
    
    import java.sql.Date;
    import java.text.SimpleDateFormat;
    /**
     * 
     * 描述:倒计时
     * @author cookie
     */
    public class SleepDemo01 {
    	public static void main(String[] args) throws InterruptedException {
    		//当前日期的10秒
    		Date endTime = new Date(System.currentTimeMillis()+1000*10);
    		long end = endTime.getTime();//毫秒数
    		while(true){
    			System.out.println(new SimpleDateFormat("mm:ss").format(endTime));//格式化并输出
    			endTime = new Date(endTime.getTime()-1000);//构建下一秒时间
    			Thread.sleep(1000);//睡眠1秒
    			if((end-10000)>endTime.getTime() ){//10秒以内继续,否则退出
    				break;
    			}
    		}
    	}
    	public static void test1() throws InterruptedException {
    		int num = 10;
    		while(true){
    			System.out.println(num--);
    			Thread.sleep(1000);
    			if(num <=0){
    				break;
    			}
    		}
    		
    	}
    }
    

      sleep网络延时---->并发

  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/blogofcookie/p/5930148.html
Copyright © 2011-2022 走看看