Java多线程
首先来理解一下什么线程,什么是进程。
个人认为,进程线程应用程序的父子关系是这样的:

一个应用程序至少有一个进程。一个进程至少有一个线程。
在任务管理器也可以看得到如何。我启动了一个UC浏览器:

如何在JAVA中实现多线程
方法有两个:
1. 继承Thread类
2. 实现Runnable接口。
首先演示一下继承Thread类的办法:
class A extends Thread{
public void run(){ //覆盖Thread类中的run方法。里面要写的是该线程的执行任务。
for(int i = 0; i <20; i++){
System.out.println("线程"+Thread.currentThread().getName()+"正在运行");
}
}
}
class ThreadDemo{
public static void main(String args[]){
A a = new A() ;
a.start();
for(int i = 0; i<20; i++){
System.out.println("线程"+Thread.currentThread().getName()+"正在运行");
}
}
运行结果:

通过继承Thread来实现多线程:覆盖run方法。用start()方法创建线程并执行run方法。
我们知道,java中是单继承的,那么这么好的一个继承机会就给了它,是一个缺陷,java官方后来给出了一种实现接口的方法来实现多线程。
那么,实现Runnable接口的方法:
class A implements Runnable{
public void run(){ //覆盖Thread类中的run方法。里面要写的是该线程的执行任务。
for(int i = 0; i <20; i++){
System.out.println("线程"+Thread.currentThread().getName()+"正在运行");
}
}
}
class ThreadDemo{
public static void main(String args[]){
A a = new A() ;
new Thread(a).start();
for(int i = 0; i<20; i++){
System.out.println("线程"+Thread.currentThread().getName()+"正在运行");
}
}
}
可以看出在创建线程类时实现Runnable接口和继承Thread类里面的代码是一样的,执行的任务都是放在run方法里。
而在线程的启动方面,是有所不同的。如果直接调用run方法,是没有启动创建新的线程的。线程的创建都是要通过Thread类的start()方法创建线程并执行run代码的,那么我们要创建一Thread类的实例,Thread类中有一个构造方法是传入Runnable实例来进行Thread类实实例化的。

那么我们就可以利用这个方法构建一个Thread实例,趁机调用start()方法创建线程并执行run();(其实创建Thread实例只是一个踏板而已,目的是调用start()方法)
既然是不同的的方法,自然各自有各自的优点:
继承Thread类的优点:
1. 没想到。
实现Runnable接口的优点:
1. 可以继承别的类。省下一个继承的机会。
2. 可以实现资源共享。
下面讲讲为什么实现Runnable接口来启动线程能实现资源共享。(当初我想了好久一会。。。而且在网上搜索还没找到有关于这个的。。我决定把它独立放出来!让有需要的人能找到的到!)
















