zoukankan      html  css  js  c++  java
  • Java多线程原理及Thread类的使用

    一、进程与线程的区别

    1.进程是应用程序在内存总分配的空间。(正在运行中的程序)

    2.线程是进程中负责程序执行的执行单元、执行路径。

    3.一个进程至少有一个线程在负责进程的运行。

    4.一个进程中有多个线程在运行的程序,为多线程程序。

    5.多线程技术是为了解决多部分代码同时执行。

    6.多线程的优点是合理的使用资源。

    二、jvm中的多线程

    1.jvm中的多线程有很多,其中有负责定义代码运行的线程(这个从main方法开始执行的主线程),也有垃圾回收的线程(因为CPU的切换的不确定所以不定时执行。或者达到某个条件下执行)。

    2.多线程的运行的根据CPU的切换完成的,也就是说怎么切换CPU说了算,所以多线程运行是随机的(CPU快速切换造成的)。

    3.每次运行结果不一定相同,因为随机性造成的。

    4.没一个线程都有运行的代码内容。这个称为线程的任务。创建一个线程就是为了去运行指定的任务代码。

    三、创建多线程的方法

    1.继承Thread类.

    2.覆盖run( )方法。

    3.创建子类对象、创建子类线程。

    4.调用Thread类中的start( )方法,来执行线程。

    start( )开启线程后,都会执行run方法。说明run( )方法中存储的是线程要运行的代码。所以自定义线程的任务代码都存储在run( )方法中。

    四、Thread.currentThread().getName()可以查看当前正在运行线程的名称

    五、调用start( )和调用run( )方法的区别

    调用start会开启线程,让开启的线程去执行run( )方法中的线程任务。

    直接调用run方法,线程并未开启,去执行run方法的只有主线程。

    六、多线程代码(一)

     1 //继承多线程方法Thread
     2 class Demo extends Thread
     3 {
     4     private String name;
     5     Demo(String name)
     6     {
     7         this.name = name;
     8     }
     9     //重写run( )方法
    10     public void run()
    11     {
    12         show();
    13     }    
    14     //需要执行的show( )方法
    15     public void show()
    16     {
    17         for (int x=1;x<=10;x++)
    18         {
    19             System.out.println(name+"x ="+x);
    20         }
    21     }
    22 }
    23 
    24 class ThreadDemo
    25 {
    26     public static void main(String[] args)
    27     {
    28         Demo d1 = new Demo("xianghong");
    29         Demo d2 = new Demo("xiaoming");
    30         //开启线程,调用run( )方法
    31         d1.start();
    32         d2.start();
    33         //需要执行的主线程
    34         for (int x=1; x<=10; x++)
    35         {
    36             System.out.println("main......"+x);
    37         }
    38     }
    39 }

     执行结果

     

     七、多线程代码(二)

     1 //继承多线程方法Thread
     2 class Demo extends Thread
     3 {
     4     private String name;
     5     Demo(String name)
     6     {
     7         this.name = name;
     8     }
     9     //重写run( )方法
    10     public void run()
    11     {
    12         show();
    13     }    
    14     //需要执行的show( )方法
    15     public void show()
    16     {
    17         for (int x=1;x<=10;x++)
    18         {
    19             //getName()显示的是默认的名称
    20             //System.out.println(getName()+"..."+name+"x ="+x);
    21             //Thread.currentThread().getName()当前正在运行线程的名称
    22             System.out.println(Thread.currentThread().getName()+"..."+name+"x ="+x);
    23         }
    24     }
    25 }
    26 
    27 class ThreadDemo
    28 {
    29     public static void main(String[] args)
    30     {
    31         Demo d1 = new Demo("xianghong");
    32         Demo d2 = new Demo("xiaoming");
    33         //开启线程,调用run( )方法
    34         d1.start();
    35         d2.start();
    36         //需要执行的主线程
    37         for (int x=1; x<=10; x++)
    38         {
    39             System.out.println(Thread.currentThread().getName()+"......"+x);
    40         }
    41     }
    42 }

    执行结果

  • 相关阅读:
    [LeetCode] Power of Three 判断3的次方数
    [LeetCode] 322. Coin Change 硬币找零
    [LeetCode] 321. Create Maximum Number 创建最大数
    ITK 3.20.1 VS2010 Configuration 配置
    VTK 5.10.1 VS2010 Configuration 配置
    FLTK 1.3.3 MinGW 4.9.1 Configuration 配置
    FLTK 1.1.10 VS2010 Configuration 配置
    Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别
    [LeetCode] Bulb Switcher 灯泡开关
    [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
  • 原文地址:https://www.cnblogs.com/zhuxr/p/9907140.html
Copyright © 2011-2022 走看看