1.1 程序、进程、线程
程序: Program,是一个指令的集合
进程: Process,(正在执行中的程序)是一个静态的概念,进程是程序的一次静态执行过程, 占用特定的地址空间.
每个进程都是独立的,由 3 部分组成 cpu,data,code
缺点:内存的浪费,cpu 的负担
线程: 是进程中一个“单一的连续控制流程”,线程又被称为轻量级进程,一个进程可拥有多个并行的(concurrent)线程 一个进程中的线程共享相同的内存单元/内存地址空间(指共享进程空间) 由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也更快。
1.2 进程与线程之间的区别
一个进程中包含了 N 多线程,如果线程结束,进程并不一定结果;进程结束,线程都将结束。CPU 调度执行的是线程
2.通过继承Thread类实现多线程
2.1 实现多线程的步骤
(1)继承 Thread 类
(2)重写 run()方法
1 public class MyThread2 extends Thread{ 2 3 @Override 4 public void run() { 5 for(int i = 0;i < 10;i++) { 6 System.out.println("-----执行线程---"+i); 7 } 8 } 9 }
(3)通过 start()方法启动线程
1 public class Test2 { 2 3 public static void main(String[] args) { 4 MyThread2 my = new MyThread2(); 5 my.start(); 6 for(int i=0;i<10;i++) { 7 System.out.println("---执行主程序----"+i); 8 } 9 } 10 }
时间片一到,转去执行其他线程, 每次执行的结果都不一样
-----------------------------------------------------------------------------------------------------
一定的缺点:Java 中的类是单继承的,一旦继承了 Thread 类,就不允许再去继承其它的类
3.通过实现Runnable接口实现多线程
3.1 实现 Runnable 接口实现多线程的步骤
(1)编写类实现 Runnable 接口
(2)实现 run()方法
1 public class MyRunnable implements Runnable{ 2 3 @Override 4 public void run() { 5 for(int i=0;i<10;i++) { 6 System.out.println("MyRunnable.run()"+i); 7 } 8 } 9 }
(3)通过 Thread 类的 start()方法启动线程
1 public class Test1 { 2 public static void main(String[] args) { 3 //创建线程类的对象 4 MyRunnable my = new MyRunnable(); 5 //start是Thread类中的方法 6 Thread t = new Thread(my); 7 t.start();//启动线程 8 9 //主线程中的循坏 10 for(int i=0;i<10;i++) { 11 System.out.println("Test1.main()"+i); 12 } 13 } 14 }
3.2 静态代理模式
Thread------>代理角色
MyRunnable-------->真实角色
代理角色与真实角色实现共同的接口 Runnable 接口,代理角色比真实角色拥有更多的方法。