多线程的常用方法
话不多说,上代码(详细说明在代码里)
package com.xiancheng.bean;
/*
* 线程类的常用相关方法
* 1、start(); 启动当前的线程,调用当前线程的run();
* 2、run(); 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明再此方法中
* 3、currentThread(); 静态方法,返回执行当前代码的线程
* 4、getName(); 获取当前线程的名字
* 5、setName(); 设置当前线程的名字
* 6、yield(); 释放当前cpu的执行权
* 7、join(); 在线程a中调用线程b的join()方法,此时线程a就会进入阻塞状态,直到线程b完全
* 执行以后,线程a才能结束阻塞状态
* 8、stop(); 已过时,当执行此方法时,强制结束当前的线程
* 9、sleep(long milltime); 让当前线程 “睡眠” 指定的milltime(毫秒),即在指定的milltime时间内
* 当前线程是阻塞状态
* 10、isAlive(); 判断当前线程是否存活
* */
public class MultithreadingThree {
public static void main(String[] args) {
Thread1 t1 =new Thread1();
// 5、setName(); 设置当前线程的名字(要在调用start()方法之前设置)
t1.setName("线程一");
// 1、start(); 启动当前的线程,调用当前线程的run();
t1.start();
for(int i=1;i<=100;i++){
if(i%2==0){
// 9、sleep(long milltime); 让当前线程 “睡眠” 指定的milltime(毫秒),即在指定的milltime时间内
// 当前线程是阻塞状态
// 注意:这个方法本身会抛出一个异常,可以看源码发现(Ctrl+鼠标左键)
try{
Thread.sleep(50);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
// 6、yield(); 释放当前cpu的执行权
if(i%10==0){
Thread.yield();
// 7、join(); 在线程a中调用线程b的join()方法,此时线程a就会进入阻塞状态,直到线程b完全
// 执行以后,线程a才能结束阻塞状态
// 此处是在main线程中调用线程一的join()方法,所以main会阻塞
// 注意:这个方法本身会抛出一个异常,可以看源码发现(Ctrl+鼠标左键)
try{
t1.join();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
// 10、isAlive(); 判断当前线程是否存活
// 因为上面有join()方法,所以执行完之后,线程一就不再存活 输出 false
System.out.println(t1.isAlive());
}
}
class Thread1 extends Thread{
// 2、run(); 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明再此方法中
public void run(){
for(int i=1;i<=100;i++){
if(i%2==0){
// 静态方法,返回执行当前代码的线程
// 例:在[Thread-1,5,main]中
// Thread-1代表线程名称
// 5代表线程优先级(默认为5)
// main代表线程所属线程组
// (例如在主函数main()主工作流程中产生一个线程,则产生的线程属于main这个线程组管理的一员。)
System.out.println(Thread.currentThread().getName()+":::"+i);
// 8、stop(); 已过时,当执行此方法时,强制结束当前的线程
// stop(); (这个方法自己打开测试体会,在这里就暂且注释掉)
}
}
}
}