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

  • 相关阅读:
    Java -verbose:gc 命令
    JVM中启用逃逸分析
    nginx指定配制文件
    jvm笔记
    python添加tab键提示
    ssh-copy-id帮你建立信任
    救火必备linux命令
    oracle判断字符串中包函另外一个字符串
    String,StringBuffer,StringBuilder三者区别
    Python数据分析应用背景
  • 原文地址:https://www.cnblogs.com/bfcs/p/10621468.html
Copyright © 2011-2022 走看看