**Java-多线程**
(1)进程
在了解多线程之前我们先来了解进程,进程就是应用程序在内存中分配的空间,也就是正在运行的程序。以前一个进程在一段时间内只能执行一个任务,当有多个子任务需要执行时,就只能逐个的执行这些子任务,很影响效率。
(2)线程的提出
为了让子任务同时执行,人们提出了线程的概念,让一个线程执行一个子任务,这样一个进程包含多个线程,一个线程单独负责一个子任务的执行。
(3)如何实现多线程
JDK提供了 Thread类 和 Runnable接口 来实现“线程”类
1.继承 Thread 类,并重写 run 方法
2.实现Runnable 接口的 run 方法
每个线程都拥有一个栈空间,共用一份堆内存
继承Thread类
public class Demo {
//main方法可看成主线程
public static void main(String[] args) {
MyThread myThread = new MyThread();
//调用start方法开启另一条线程
myThread.start();
}
public static class MyThread extends Thread{
/**
* Thread类里面提供的run方法,run方法里面为另一条线程的内容
*/
@Override
public void run() {
System.out.println("MyThread");
}
}
}
实现Runnable接口
public class Demo {
//main方法可看成主线程
public static void main(String[] args) {
//1.创建一个任务对象
MyRunnable myRunnable = new MyRunnable();
//2.创建一个线程并为其分配一个任务
Thread t = new Thread(myRunnable);
//3.执行这个线程
t.start();
}
public static class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("MyRunnable");
}
}
}
通过匿名内部类的方式实现多线程
public class Demo {
public static void main(String[] args) {
new Thread() {
@Override
public void run() {
System.out.println("MyRunnable");
}
}.start();
}
}
Thread类与Runnable接口之间的比较
1.由于Java"单继承,多实现"的特性,Runnable接口使用起来比Thread更灵活
2.可以避免单继承所带来的局限性
3.因为任务与线程是分离的,降低了线程对象与线程任务的耦合性
4.线程池技术,接受Runnable类型的线程,不接受Thread类的线程