一、Thread类的有关方法(1)
1.void start()::启动线程,并执行对象的run()方法
2.run():线程在被调度时执行的操作
3.String getName():返回线程的名称
4.void setName(String name):设置该线程名称
5.static currentThread():返回当前线程
二、线程的优先级
1.线程的优先级控制:
①MAX_PRIORITY(10);
②MIN_PRIORITY(1);
③NORM_PRIORITY(5);
2.涉及的方法
①getPriority():返回线程优先值
②setPriority(int newPriority):改变线程的优先级
③线程创建时继承父线程的优先级
三、Thread类的有关方法(2)
1.static void yield():线程让步
①暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
②若队列中没有同优先级的线程。忽略此方法
2.join():当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到join()方法加入的join线程执行完为止
①优先级低的线程也可以获得执行
3.static void sleep(long millis):(指定时间:毫秒)
①令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
②抛出InterruptedException异常
4.stop():强制线程生命期结束
5.boolean isAlive():返回boolean,判断线程是否还活着
package day20; public class Test1 { public static void main(String[] args){ TestRun run0 = new TestRun(); TestRun run1 = new TestRun(); Thread t0 = new Thread(run0); Thread t1 = new Thread(run1); t0.setName("线程T-0");//设置线程的名称 t1.setName("线程T-1"); // t0.setPriority(1);//设置线程的优先级 // t1.setPriority(10); t0.start(); t1.start(); System.out.println(t0.getName());//如果在创建线程的时候没有指定名称,系统会给出默认名称,通过getName()获取线程名称 System.out.println(t1.getName()); /** * 线程的优先级,就是哪个线程有较大的概率被执行 * 优先级是用数字1-10表示,数字越大,优先级越高,如果没有设置,默认优先级是5 */ System.out.println("t0的优先级:" + t0.getPriority());//获取线程的优先级 System.out.println("-------------------1"); System.out.println("-------------------2"); System.out.println(t1.isAlive());//判断当前的线程是否存活 t1.stop();//强制线程生命期结束,强制停止此线程 try { t0.join();//相当于在这块把t0的run方法的代码插入到这个位置执行 /** * 阻塞当前的main方法,先不执行System.out.println("-------------------3");代码 * 先执行join进来的线程的代码 * */ } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("-------------------3"); } } class TestRun implements Runnable{ int count = 0; public void run() { // TODO Auto-generated method stub System.out.println(Thread.currentThread().getName() + ":Runnable多线程运行的代码"); for(int i = 0; i < 5; i++){ try { Thread.sleep(1000);//当前线程睡眠1000毫秒,相当于当前的这个循环,每隔1000毫秒执行一次 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // if(i % 2 ==0){ // Thread.yield();//线程让步 // } count ++; System.out.println(Thread.currentThread().getName() + ":这是Runnable多线程的逻辑代码:" + count); } } }
打印结果:
四、线程的生命周期
1.JDK中用Thread.State枚举表示了线程的几种状态。
2.想要实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:
①新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。
②就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件。
③运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态,run()方法定义了线程的操作和功能。
④阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入了阻塞状态。
⑤死亡:线程完成了它的全部工作或线程被提前强制性的终止。