线程状态

线程状态

线程状态

线程状态

线程停止

package com.zishi.lesson3;
?
//测试stop
//1.建议线程正常停止--》利用次数,不建议死循环
//2.简易使用标志位-->设置一个标志位
//3.不要使用stop 或者 destroy 等过时或者JDK不建议使用的方法
public class TestStop implements Runnable{
?
   //1.设置一个标识位
   private boolean flag = true;
?
   @Override
   public void run() {
       int i = 0;
       while (flag){
           System.out.println("run...Thread"+i);
      }
  }
?
   //2.设置一个公开的方法停止线程,转换标识位
   public void stop(){
       this.flag = false;
  }
?
   public static void main(String[] args) {
       TestStop testStop = new TestStop();
       new Thread(testStop).start();
?
       for (int i = 0; i < 100; i++) {
           System.out.println("main"+i);
           if (i==90){
               //调用stop方法切换标识位,停止线程
               testStop.stop();
          }
      }
  }
?
}

通过主线程停止子线程?

线程休眠

package com.zishi.lesson3;
?
import com.zishi.lensson1.TestThread4;
?
//模拟网络延时:放大问题的发生性
public class TestSleep implements Runnable{
   //票数
   private int ticketNums = 10;
?
?
   @Override
   public void run() {
       while (true){
           if (ticketNums<=0){
               break;
          }
?
           //模拟延时
           try {
               Thread.sleep(100);
          } catch (InterruptedException e) {
               e.printStackTrace();
          }
?
           System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");
      }
  }
?
   public static void main(String[] args) {
       TestThread4 testThread4 = new TestThread4();
?
       new Thread(testThread4,"小明").start();
       new Thread(testThread4,"小黄").start();
       new Thread(testThread4,"黄牛").start();
  }
}
package com.zishi.lesson3;
?
import java.text.SimpleDateFormat;
import java.util.Date;
?
//模拟倒计时
public class TestSleep2 {
?
   public static void main(String[] args) {
//       try {
//           timeDown();
//       } catch (InterruptedException e) {
//           e.printStackTrace();
//       }
       //每秒获取一次系统时间
?
       Date date = new Date(System.currentTimeMillis());//获取当前系统时间
?
       while (true){
           try {
               Thread.sleep(1000);
               System.out.println(new SimpleDateFormat("HH:mm:ss").format(date));
               date = new Date(System.currentTimeMillis());//更新当前时间
          } catch (InterruptedException e) {
               e.printStackTrace();
          }
      }
?
  }
?
   //模拟倒计时
   public static void timeDown() throws InterruptedException {
       int num = 10;
       while(true){
           Thread.sleep(1000);
           System.out.println(num--);
           if (num<=0){
               break;
          }
      }
  }
}

线程礼让

package com.zishi.lesson3;
?
//礼让线程
//礼让不一定成功,看CPU心情
public class TestYield {
   public static void main(String[] args) {
       MyYielf myYielf = new MyYielf();
?
       new Thread(myYielf,"a").start();
       new Thread(myYielf,"b").start();
  }
}
?
class MyYielf implements Runnable{
   @Override
   public void run() {
       System.out.println(Thread.currentThread().getName()+"线程开始执行");
       Thread.yield();
       System.out.println(Thread.currentThread().getName()+"线程停止执行");
  }
}

线程状态

线程状态

这个例子有点问题。。。ab线程都会礼让,不能确定谁先执行,

线程Join 插队

package com.zishi.lesson3;
?
//测试Join方法 插队
public class TestJoin implements Runnable {
   @Override
   public void run() {
       for (int i = 0; i < 1000; i++) {
           System.out.println("线程VIP来了"+i);
      }
  }
?
   public static void main(String[] args) throws InterruptedException {
?
       //启动我们的线程
       TestJoin testJoin = new TestJoin();
       Thread thread = new Thread(testJoin);
       thread.start();
?
       //主线程
       for (int i = 0; i < 500; i++) {
           if (i == 200){
               thread.join();//插队
          }
           System.out.println("main"+i);
      }
  }
}

线程状态观测

线程状态

package com.zishi.lesson3;
?
//观察测试线程的状态
public class TestState {
   public static void main(String[] args) throws InterruptedException{
       Thread thread = new Thread(()->{   //lembda
           for (int i = 0; i < 5; i++) {
               try {
                   Thread.sleep(1000);
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
          }
           System.out.println("///////");
      });
?
       //观察状态
       Thread.State state = thread.getState();
       System.out.println(state);          //NEW
?
       //观察启动后的线程状态
       thread.start(); //启动线程
       state = thread.getState(); //更新
       System.out.println(state);         //RUN
?
       while (state != Thread.State.TERMINATED){
           Thread.sleep(100);
           state = thread.getState();
           System.out.println(state);
      }
  }
}

线程优先级

package com.zishi.lesson3;
?
//测试线程的优先级
public class TestPriority {
   public static void main(String[] args) {
       //主线程默认优先级
       System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
?
       MyPriority myPriority = new MyPriority();
?
       Thread t1 = new Thread(myPriority);
       Thread t2 = new Thread(myPriority);
       Thread t3 = new Thread(myPriority);
       Thread t4 = new Thread(myPriority);
       Thread t5 = new Thread(myPriority);
       Thread t6 = new Thread(myPriority);
?
       //设置优先级再启动
       t1.setPriority(1);
       t1.start();
?
       t2.setPriority(5);
       t2.start();
?
       t3.setPriority(6);
       t3.start();
?
       t4.setPriority(8);
       t4.start();
?
       t5.setPriority(Thread.MAX_PRIORITY);//MAX_PRIORITY=10
       t5.start();
?
       t6.setPriority(3);
       t6.start();
  }
}
?
class MyPriority implements Runnable{
   @Override
   public void run() {
       System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
  }
}

线程状态

线程状态

并没有完全起作用,只是提高优先级,还是看CPU

 

线程状态

上一篇:关于 vue-cli 使用 postcss-px-to-viewport 使移动端自适应


下一篇:Android 资源文件 shape 绘制方形,圆形,背景边框