zoukankan      html  css  js  c++  java
  • 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()或者构造函数

  • 相关阅读:
    【微信开发之问题集锦】redirect_uri 参数错误
    调度算法之时间片轮转算法
    快速排序算法分析和实现
    单链表(c语言实现)贼详细
    调度算法之最短作业优先算法
    HDU1027
    HDU1753 (大正小数相加)
    HDU 1715 (大数相加,斐波拉契数列)
    HDU 1316 (斐波那契数列,大数相加,大数比较大小)
    HDU1047(多个大数相加)
  • 原文地址:https://www.cnblogs.com/514929hgy/p/6934698.html
Copyright © 2011-2022 走看看