多线程基本概念和多线程的实现

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 }
View Code

(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 }
View Code

时间片一到,转去执行其他线程, 每次执行的结果都不一样

-----------------------------------------------------------------------------------------------------

一定的缺点: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 }
View Code

(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 }
View Code

 

3.2 静态代理模式

Thread------>代理角色

MyRunnable-------->真实角色

代理角色与真实角色实现共同的接口 Runnable 接口,代理角色比真实角色拥有更多的方法。

posted @ 2019-03-29 15:17  北风吹沙  阅读(275)  评论(0编辑  收藏  举报