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

  • 相关阅读:
    SAP S/4HANA extensibility扩展原理介绍
    SAP CRM系统订单模型的设计与实现
    使用nodejs代码在SAP C4C里创建Individual customer
    SAP Cloud for Customer Account和individual customer的区别
    Let the Balloon Rise map一个数组
    How Many Tables 简单并查集
    Heap Operations 优先队列
    Arpa’s obvious problem and Mehrdad’s terrible solution 思维
    Passing the Message 单调栈两次
    The Suspects 并查集
  • 原文地址:https://www.cnblogs.com/bfcs/p/10621468.html
Copyright © 2011-2022 走看看