zoukankan      html  css  js  c++  java
  • 多线程基本概念和多线程的实现

    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 接口,代理角色比真实角色拥有更多的方法。

  • 相关阅读:
    设计模式课程 设计模式精讲 11-2 装饰者模式coding
    设计模式课程 设计模式精讲 10-3 外观模式源码解析
    设计模式课程 设计模式精讲 11-1 装饰者模式讲解
    设计模式课程 设计模式精讲 10-2 外观模式coding
    设计模式课程 设计模式精讲 10-1 外观模式讲解
    设计模式课程 设计模式精讲 重点
    设计模式课程 设计模式精讲 9-4 原型模式源码解析
    设计模式课程 设计模式精讲 9-3 原型模式-克隆破坏单例
    iframe平铺到浏览器
    密码输入框
  • 原文地址:https://www.cnblogs.com/bfcs/p/10621468.html
Copyright © 2011-2022 走看看