目录
- 1.多线程常见的成员方法
- 2.优先级相关的方法
- 3.守护线程(备胎线程)
- 4.其他线程
1.多线程常见的成员方法
①如果没有给线程设置名字,线程是有默认名字 的:
Thread-X
(X序号,从0开始)
②如果要给线程设置名字,可以使用set方法
或者子类继承Thread的构造方法
设置。
例如:MyThread t1 = new MyThread("坦克");
③currentThread()
方法:
当JVM虚拟机启动之后,会自动的启动多条线程,
其中有一条线程就叫做main线程,
他的作用就是去调用main方法,并执行里面的代码,
在以前,我们写的所有的代码,其实都是运行在main线程
当中。
④sleep(long time)
:
让当前执行的线程睡眠对应的时间,参数单位为毫秒,当睡眠时间结束后,线程会继承执行后面的其他代码。
2.优先级相关的方法
线程的调度分为抢占式调度(随机性)和非抢占式调度。
线程优先级最小为1,最大是10,默认是5
。
定义一个类实现Runnable接口
public class Myrun implements Runnable {@Overridepublic void run() {//重写方法for (int i = 0; i < 100; i++) {System.out.println(Thread.currentThread().getName() + ":hello world!" + i);}}
}
测试类:查看线程优先权,修改线程优先权并运行查看线程的执行顺序。
public class Demo2 {public static void main(String[] args) {//创建线程要执行的参数对象Myrun mr = new Myrun();//创建线程对象Thread t1 = new Thread(mr, "飞机");Thread t2 = new Thread(mr, "坦克");//查看线程的优先级System.out.println(t1.getPriority());//5System.out.println(t2.getPriority());//5//修改优先级t1.setPriority(1);t2.setPriority(10);//运行线程t1.start();t2.start();}
}
3.守护线程(备胎线程)
当非守护线程结束之后,
守护线程会陆续结束
。
应用场景:当聊天窗口关闭时,传输文件(守护线程)就没有存在的必要了。
定义守护线程,继承父类,重写run方法:打印100次线程名:
public class MyThread1 extends Thread{@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println(getName()+"@"+i);}}
}
定义非守护线程:打印10次线程名
public class MyThread2 extends Thread{@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println(getName()+"@"+i);}}
}
主函数:观察守护线程的结束时机
public class Demo1 {public static void main(String[] args) {//创建线程MyThread1 t1 = new MyThread1();MyThread2 t2 = new MyThread2();//设置线程名t1.setName("女神");t2.setName(" 备胎");//把第二个线程设置为守护线程t2.setDaemon(true);//启动线程,观察守护线程的结束时机t1.start();t2.start();}
}
4.其他线程
①
出让
线程/礼让线程:Thread.yield();
让线程的执行尽可能地均匀分布。
②插入线程:t.join();
表示将t线程插入到当前线程之前运行。