Java多线程详解
继承Thread类实现多线程
1、run方法(需要重写)
(1):run方法就是线程要执行任务的方法
(2):启动线程不需要调用run方法,而是调用threa里的start方法来启动任务
(3):main方法中的叫做主线程,它和其他线程同时执行,其中谁先执行,谁后执行是不一定的(两个线程强占时间分配)看例子:
package Day1;
public class Demo1 {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
for (int i=0;i<10;i++){
System.out.println("锄禾日当午"+i);
}
}
}
package Day1;
public class MyThread extends Thread{
public void run(){
//需要重写run方法
for (int i=0;i<10;i++){
System.out.println("汗滴禾下土"+i);
}
}
}
我们来看多次执行的结果:
我们可以发现两次的结果是不一样的。
(4):每个线程都有自己的栈空间,共用一份堆内存
实现Runnable接口实现多线程(更常用)
(1):创建一个任务对象(用Runnable创建)
(2):创建一个线程并为其分配任务(还要用到Thread创建对象,并将创建的任务对象传给Thread)
(3):执行这个程序(线程对象.start方法)
看例子:
package Day1;
public class Demo1 {
public static void main(String[] args) {
//创建任务对象
MyRunnanle myRunnanle = new MyRunnanle();
//创建一个线程,并讲任务赋给线程
Thread thread = new Thread(myRunnanle);
//执行任务
thread.start();
//主线程
for (int i=0;i<10;i++){
System.out.println("锄禾日当午"+i);
}
}
}
package Day1;
public class MyRunnanle implements Runnable{
public void run(){
//创建一个任务
for (int i=0;i<10;i++){
System.out.println("汗滴禾下土"+i);
}
}
}
我们来看执行的结果:
同样是两个线程同时进行
实现Runnable比继承Thread的优势
1:通过创建任务,然后给线程分配的方式来实现多继承,更适合多个线程同时执行相同任务的情况
2:可以避免单继承所带来的局限性
3:线程与任务本身是分离的,提高了程序的健壮性
4:线程池技术只支持Runnable类型的任务,不接收Thread类型的线程
设置和获取线程的名称
获取当前线程的方法
Thread.currentThread();
获取线程名称的方法为:
Thread.currentThread().getName();
设置现成的名称
Thread.currentThread().getName();
看例子
package Day1;
public class Demo1 {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName</