一、方法总结
-
Thread类的常用方法
void setName(String name)//将此线程的名称更改为name
String getName()//如果不设置名称,则线程默认名称为Thread-0或Thread-1或…就是Thread -?
String Thread.currentThread().getName()//获得当前线程名称
Thread(Runnable target,String name)//把MyRunnable对象作为构造方法的参数时,给线程起名字
-
线程优先级
注意:线程默认的优先级是5;
-
1.6 线程控制
-
1.7线程的生命周期
二、代码演示:
1、继承Thread实现多线程
MyThread.java
//1、定义一个MyThread类继承Thread类
//2、在MyThread类中重写run()方法
//3、创建MyThread对象
//4、创建线程
public class MyThread extends Thread{
public MyThread(){};
public MyThread(String name){
super(name);
}
public void run(){
for(int i=0;i<100;i++)
System.out.println(getName()+": "+i);
}
}
MyThreadDemo.java
public class MyThreadDemo {
public static void main(String[] args) {
MyThread my1 = new MyThread("高铁");//带参构造设置线程的名称
MyThread my2 = new MyThread("飞机");
MyThread my3 = new MyThread("汽车");
//my1.run();
// my2.run();
//运行可知run()方法并没有启动线程
//void start()导致线程开始执行;java虚拟机调用此线程的run()方法
//my1.setName("线程1");//设置线程名称
//my2.setName("线程2");
// System.out.println(my1.getPriority());//获取优先级
// System.out.println(my2.getPriority());
// System.out.println(my3.getPriority());
//设置优先级
//优先级范围,最高10,最低1,默认5
my1.setPriority(5);
my2.setPriority(10);
my3.setPriority(1);
my1.start();
//my1执行结束才执行其他的线程
try {
my1.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
Thread.currentThread().setName("主线程");//设置主线程
//void setDaemon()设置守护线程,当运行的线程都为守护线程时,java虚拟机将退出
my2.setDaemon(true);//设置守护线程
my3.setDaemon(true);
my2.start();
my3.start();
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
2、实现Runnable接口实现多线程
首先创建MyThread对象,再创建Thread对象,把MyRunnable对象作为构造方法的参数
MyRunnable.java
public class MyRunnable implements Runnable{
public void run() {
for(int i=0;i<100;i++)
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
class Main {
public static void main(String[] args) {
//创建MyThread对象
MyRunnable my = new MyRunnable();
//创建Thread对象,把MyRunnable对象作为构造方法的参数
//Thread(Runnable target)
Thread t1 = new Thread(my);
Thread t2 = new Thread(my);
//给线程起名字
//Thread(Runnable target,String name)
Thread t3 = new Thread(my,"高铁");
t1.start();
t2.start();
t3.start();
}
}
我们一般使用Runnable实现多线程,因为继承Thread开销更大;但是使用Thread更简单。