一.什么是多线程
- 首先我们要分清什么是线程什么是进程
- 进程:
应用程序的的执行实例
有独立的内存空间和系统资源 - 线程:
CPU调度和分派的基本单位
应用程序的执行示例 - 什么是多线程?
a.如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程
b.多个线程交替占用CPU资源,而非真正的并行执行 - 主线程:
a.main()方法为主线程的入口
b.产生其他子线程的线程
c.必须最后执行完成,因为它执行各种关闭动作 - 显示主线程名并修改
public static void main(String args[]) {
Thread t= Thread.currentThread(); //创建主线程对象
System.out.println("当前线程是: "+t.getName()); //获得主线程名
t.setName("MyJavaThread"); //修改主线程名为MyJavaThread
System.out.println("当前线程名是: "+t.getName()); }//再次获得主线程名
二. 怎么使用多线程?
- Java中提供了Thread线程类,继承Thread的类就是线程类,可以实例化Thread类来创建子线程
- 继承Thread的优势:编写简单,可直接操作线程/适用于单线程
- Java中还提供了Runnable接口,通过绑定Runnable接口的类,也是线程类
- 绑定Runnable接口的优势:避免单继承的局限性/便于资源共享
- 代码示例——通过继承Thread类来创建子线程
public class TestThread extends Thread{//继承线程类
@Override
public void run() {//重写run方法
for (int i = 0; i <20; i++) {
System.out.println("你好:"+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
TestThread testThread=new TestThread();//实例化TestThread
Thread thread=new Thread(testThread,"Tom");//创建新的线程对象,将子类对象载入线程中,并命名Tom
Thread thread1=new Thread(testThread,"jack");创建新的线程对象,将子类对象载入线程中,并命名jack
thread.start();//开启Tom子线程
thread1.start();//开启jack子线程
}
}
- 代码示例——通过绑定Runnable接口来创建子线程
public class TestRunable implements Runnable {//绑定Runnable接口
@Override
public void run() {//重写run方法
for (int i = 0; i <20; i++) {
System.out.println("你好:"+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
TestThread testThread=new TestThread();//实例化绑定接口对象
Thread runnable=new Thread(testThread,"TOM");//创建新线程并载入子类线程对象并命名Tom
Thread runnable1=new Thread(testThread,"JACK");//创建新线程并载入子类线程对象并命名JACK
runnable.start();//开启子线程
runnable1.start();//开启子线程
}
}
三.直接调用run()与start()的区别
- 直接调用run()方法,只是在主线程执行一个方法
- 而调用start()方法,则是启动一个新线程来执行run方法
四.线程的状态
五.线程的常用方法 
1.join方法只适用于主线程中来操作子线程