• 多线程(一)基础


    1.什么是多线程

    正常我们执行任务时,任务都是从上到下有序执行,而多线程,就是让多个任务同时执行。

    2.创建线程方式一——Thread类

    2.1Thread类的构造方法和常用方法

    2.2如何使用

    1.因为无法直接创建Thread对象,所以我们先创建一个类,继承Thread,重写其中的run方法。

    1 public class MyThread extends Thread {
    2     @Override
    3     public void run() {
    4         // TODO Auto-generated method stub
    5         for (int i = 0; i < 100; i++) {
    6             System.out.println(getName()+":"+i);
    7         }
    8     }
    9 }

    2.再创建测试类,创建该类对象,执行对象,注意要使用Thread中的start()方法开启,否则就只是调用run()这个方法。

     1 public class demo02 {
     2     public static void main(String[] args) {
     3         //创建线程对象
     4         MyThread my = new MyThread();
     5         //开启线程
     6         my.start();
     7         //描述主线程任务
     8         for (int i = 1; i < 100; i++) {
     9             System.out.println(Thread.currentThread().getName()+":"+i);
    10         }
    11     }
    12 }

    Thread类中,包含几个方法,第一个是getName(),用来获取该线程的线程名,还有一个方法,是返回当前正在执行的线程对象的引用的currentThread()方法,后面这个就是用来在主方法中使用。

    3.执行结果:

    我们看到两个任务在同时进行,且你的CPU越好,这种频繁切换的数量就会更多。

    3.创建线程方式二——Runnable接口

    3.1Thread类中与Runnable有关的构造方法

     

     3.2Runnable接口的使用方法

    1.也是先创建实现Runnable接口的类

    1 public class MyRunnable implements Runnable {
    2     @Override
    3     public void run() {
    4         // TODO Auto-generated method stub
    5         for (int i = 1; i < 101; i++) {
    6             System.out.println(Thread.currentThread().getName()+":"+i);
    7         }
    8     }
    9 }

    2.再创建测试类,创建其线程任务对象,创建线程,执行任务。

     1 public class demo01 {
     2     public static void main(String[] args) {
     3         //创建线程任务对象
     4         MyRunnable mr = new MyRunnable();
     5         //创建线程
     6         Thread th = new Thread(mr);
     7         th.start();
     8         for (int i = 1; i < 101; i++) {
     9             System.out.println(Thread.currentThread().getName()+":"+i);
    10         }
    11     }
    12 }

    3.执行结果

    也是两个线程同时执行,那区别在什么地方?

    区别在于,直接继承Thread类时,因为规定一个类只能继承一个类,所以直接断掉了继承其他类的办法,而使用实现Runnable接口的方法,因一个类可以实现多个接口,所以不影响类其本身的其他操作。

    4.匿名内部类

    我们在如果只重写一个方法,就可以使用匿名内部类的办法。

     1 public static void main(String[] args) {
     2         //1.继承Thread类
     3         //创建Thread类的子类对象
     4         Thread t = new Thread(){
     5             public void run() {
     6                 for (int i = 1; i < 101; i++) {
     7                     System.out.println(getName()+":"+i);
     8                 }
     9             }
    10         };
    11         //开启线程
    12         t.start();
    13         //2.实现Runnable接口
    14         //创建线程任务对象
    15         Runnable r = new Runnable(){
    16             public void run() {
    17                 for (int i = 1; i < 101; i++) {
    18                     System.out.println(Thread.currentThread().getName()+":"+i);
    19                 }
    20             }
    21         };
    22         //创建线程对象
    23         Thread t1 = new Thread(r);
    24         t1.start();
    25     }
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    椭圆曲线加解密
    执行计划多版本查看
    椭圆曲线算法:入门(1)
    “戏精少女”的pandas学习之路,你该这么学!No.5
    用Fabric构建应收账款融资系统的方法
    区块链的去中心化创新
    搜集统计信息
    去中心化计算
  • 原文地址:https://www.cnblogs.com/shenhx666/p/15060826.html
Copyright © 2020-2023  润新知