一、重要概念:
1、应用程序由一个或多个相互协作的进程组成。进程包含一个或多个线程。
2、进程可以申请和拥有系统资源,线程只能归属于一个进程并且它只能访问该进程所拥有的资源。在引入线 程的OS中,进程是作为分配资源的基本单位,线程作为独立运行和独立调度的基本单位。因为线程比进程小(基本不拥有系统资源),对它的调度开销少,更有效的提高多个程序的并发执行程度
3、进程之间相互独立。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;
线程只是一个进程中的不同执行路径。同一进程内的各个线程间实现共享数据空间。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉;所以多进程的程序要比多线程的程序健壮。
二、Java中创建线程的方法
1、继承Thread类
2、实现Runnable接口
接口需要类来实现。看下图,即可知道二者的关系
简单的创建线程
1、继承Thread类创建线程(分三步)
2、实现Runnable接口
1、继承Thread类创建线程(分三步)
// 1、继承Thread类
public class MyThread extends Thread{
private String name;
public MyThread(String name) {
this.name = name;
}
// 2、实现run方法
public void run(){
System.out.println("线程"+ name + "运行了");
}
public static void main(String[] args) {
//3、启动线程
new MyThread("newThread").start();
}
}
2、实现Runnable接口
//1、实现Runnable接口
public class MyRunnabel implements Runnable{
String name;
public MyRunnabel(String name) {
this.name = name;
}
//2、重写run方法
@Override
public void run() {
System.out.println("线程"+ name + "运行了");
}
public static void main(String[] args) {
//3、创建Runnable对象
Runnable r = new MyRunnabel("newRunnable");
//4、创建Thread对象
Thread t = new Thread(r);
//5、启动线程
t.start();
}
}<span style="font-size:24px;">
</span>
深入理解
1、线程能最大程度的利用cpu,一旦一个线程暂停执行,cpu又转向去执行其它任务,看上去多个程序同时运行,提供cpu利用率
public class ThreadDemo extends Thread{
String name;
public ThreadDemo(String name) {
this.name = name;
}
public void run(){
for(int i = 0; i < 5; i++){
System.out.print(name + i + " ");
try {
Thread.sleep(10);//暂停一会儿,让CPU执行其它线程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//创建类对象并运行线程
new ThreadDemo("A").start();
new ThreadDemo("B").start();
new ThreadDemo("C").start();
}
}