java学习初探十八之线程的调度与控制

xiaoxiao2021-02-28  7

1.sleep基本用法

package ThreadTest; /* 1.Thread.sleep(毫秒) 2.sleep方法是一个静态方法 3.该方法作用是阻塞当前线程,腾出cpu,让给其他线程 */ public class ThreadTest6 { public static void main(String[] args) { Thread t1=new MyThread(); t1.setName("t1"); t1.start(); } } class MyThread extends Thread{ //Thread方法中run不抛出异常,所以重写run方法之后,在run方法的声明位置不能使用throws //所以run方法中的异常只能try catch public void run() { try { for(int i=0;i<10;i++) { System.out.println(Thread.currentThread().getName()+"---->"+i); Thread.sleep(1000);//当前线程阻塞1秒 } } catch (InterruptedException e) { e.printStackTrace(); } } }

2.关于sleep的一个面试题,主要考察静态方法的调用

package ThreadTest; /* 面试题 */ public class ThreadTest7 { public static void main(String[] args) throws InterruptedException { Thread t=new process(); t.setName("t"); t.start(); //休眠 //Thread.sleep(5000); t.sleep(5000);//实际阻塞的是主线程。等价于Thread.sleep(5000)。 System.out.println("HelloMyworld");//5秒后输出 } } class process extends Thread{ public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName()+"--->"+i); } } }

3.interrupt打断休眠

package ThreadTest; /* 某线程正在休眠,如何打断它的休眠 t.interrupt,依靠的是异常处理机制 */ public class ThreadTest8 { public static void main(String[] args) throws InterruptedException { //需求:启动线程后,5秒后打断线程的休眠 Thread t=new Thread(new proccessortest()); t.setName("t"); t.start(); //5s之后 Thread.sleep(5000); //打断t的休眠 t.interrupt(); } } class proccessortest implements Runnable{ public void run() { try { Thread.sleep(100000000);//interrupt后,发生异常 } catch (InterruptedException e) { //e.printStackTrace(); } for(int i=0;i<10;i++) { System.out.println(Thread.currentThread().getName()+"--->"+i); } } }

4.线程的终止

package ThreadTest; /* 如何正确的更好的终止一个正在执行的线程。 需求:线程启动5s后终止 */ public class ThreadTest9 { public static void main(String[] args) throws InterruptedException { ProccessTest p= new ProccessTest(); Thread t=new Thread(p); t.setName("t"); t.start(); //5s Thread.sleep(5000); //终止 p.run=false; } } class ProccessTest implements Runnable{ boolean run=true; public void run() { for(int i=0;i<10;i++) { if(run) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"--->"+i); }else { return; } } } }
转载请注明原文地址: https://www.6miu.com/read-2050211.html

最新回复(0)