什么是多线程
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”
多个线程交替占用CPU资源,而非真正的并行执行
多线程好处
充分利用CPU的资源
简化编程模型
带来良好的用户体验
主线程
Thread类
Java提供了java.lang.Thread类支持多线程编程
主线程
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成执行,因为它执行各种关闭动作
public class TheardDemo {
public static void main(String[] args) {
// currentThread()
Thread t=Thread.currentThread();
//getName()
String name=t.getName();
System.out.println(name);
//getPriority()
int priority=t.getPriority();
System.out.println("线程的优先级:"+priority);
//setName()
t.setName("凯撒");
System.out.println("线程名称:"+t.getName());
//setsetPriority()
t.setPriority(8);
System.out.println("线程优先级:"+t.getPriority());
}
}
线程的创建和启动
public class MyThread extends Thread {
public MyThread(){
}
public MyThread(String name){
super(name);
}
@Override
public void run() {
for (int i = 1; i <=20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class Test {
public static void main(String[] args) {
MyThread mt1=new MyThread("张三");
MyThread mt2=new MyThread("赵四");
//start()启动线程的方法
// 当同时启动两个线程以后,会出现两个线程交替占用CPU执行代码的结果
mt1.start();
mt2.start();
}
}
实现Runnable接口创建线程
start()方法是Thread类中的方法,而我们需要通过start()方法来调用run()方法,不能直接调用run()方法,但是Runnable接口中只有一个抽象方法run()方法,那么实现Runnable接口的类不能调用start()方法
解决办法:
将实现Runnable接口的类对象作为参数传递给Thread构造方法,然后通过Thread类对象调用start()方法
public class MyThread implements Runnable {
@Override
public void run() {
for (int i = 1; i <=20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class Test {
public static void main(String[] args) {
MyThread mt=new MyThread();
Thread t1=new Thread(mt,"张三");
Thread t2=new Thread(mt,"赵四");
t1.start();
t2.start();
}
}
比较两种创建线程的方式
继承Thread类
编写简单,可直接操作线程
适用于单继承
实现Runnable接口(推荐使用)
避免单继承局限性
便于共享资源