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

  • 相关阅读:
    Linux之ARP——种种
    Linux之内核参数——backlog/somaxconn
    CLOSE_WAIT、CLOSE_WAIT原因,危害,如何避免
    OVS——大杂烩
    Linux 网络栈——
    OpenShift——大杂烩
    协议之ICMP——种种
    Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]
    Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]
    CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
  • 原文地址:https://www.cnblogs.com/bfcs/p/10621468.html
Copyright © 2011-2022 走看看