• Java基础中的 线程


     创建线程的方式:

      1. 继承Thread类

        (1)定义类,继承Thread

        (2)复写Thread类中的void run()方法(因为Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。)

        (3)调用线程的start方法,该方法能启动线程,并能调用run方法

        注:对象.run()仅仅是对象调用方法。而线程创建了,并没有运行;

          对象.start()开启线程并执行该线程的run方法

      2. 实现Runnable接口

        (1)定义类,实现Runnable接口

        (2)覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中

        (3)通过Thread类建立线程对象

        (4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。因为,自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象的run方法,就必须明确该run方法所属的对象。

        (5)调用Thread类的start方法开启线程,并调用Runnable接口子类的run方法

      实现方式与继承方式的区别:

       实现方式好处:避免了单继承的局限性。在定义线程时,建议使用实现方式。

       继承Thread:线程代码存放在Thread子类run方法中;实现Runnable:线程代码存放在接口的子类的run方法。

    继承Thread类的例子

    public class TestThread2 {
        public static void main(String[] args) {
            
            MyThread2 mt = new MyThread2();
            
            mt.start();
            
            for (int i = 0; i < 50; i++) {
                System.out.println("TestThread-----------" + i);
            }
        }
    }
    
    class MyThread2 extends Thread{
        public void run() {
            for (int i = 0; i < 50; i++) {
                System.out.println("MyThread=========" + i);
            }
        }
    }

    实现Runnable接口的例子:

    public class TestThread {
        public static void main(String[] args) {
            
            MyThread mt = new MyThread();
            Thread t = new Thread(mt);
            t.start();
            // mt.run();
            for (int i = 0; i < 50; i++) {
                System.out.println("TestThread-----------" + i);
            }
        }
    }
    
    class MyThread implements Runnable {
        public void run() {
            for (int i = 0; i < 50; i++) {
                System.out.println("MyThread=========" + i);
            }
        }
        
    }

    3.线程的方法:

       Join方法:线程对象.join(),当A线程执行到了B线程的.join()方法,A就会等待。等B线程都执行完,A才会执行。join可以用来临时加入线程执行。

     yield方法:暂停当前正在执行的线程对象,并执行其他线程。

       static Thread currentThread():获取当前线程对象

     getName():获取线程名称

     设置线程名称:setName()或者构造函数

  • 相关阅读:
    301重定向的代码
    小问题,小细节要注意(string类型转换为bool类型)
    关于添加网站适配的问题解决
    this.Page.Request.ServerVariables
    将一个字段的两个数据分开读取
    使用distinct出现的一个问题
    什么是集合是只读的?
    编辑完这一条数据如何继续转入下一条数据(快速编辑)
    系统信息相关命令
    用户权限相关命令
  • 原文地址:https://www.cnblogs.com/514929hgy/p/6934698.html
Copyright © 2020-2023  润新知