Java中Thread类的详解

时间:2025-04-28 07:38:14

Thread(多线程类)

多线程

  • 进程: 通俗的来说,每一个程序都是一个进程,比如:QQ,360,谷歌。

  • 线程: 每一个程序中都有多个功能,每一个功能都可以看成是一个线程。

Thread的使用

  • 继承子类建立线程
    对于每一个线程,都是可以通过类继承Thread来完成的。
ublic class Thread_one {
    public static void main(String[] args) {
        Ter it = new Ter();
        //start开始运行线程中的方法
        it.start();
    }
}
class Ter extends Thread{
    @Override
    //run方法里面的方法是线程的主方法
    public void run() {
        for (int i = 0; i <100; i++) {
            if(i%2==0){
                System.out.println(i);
            }
        }
    }
}
  • 内部对象类
 new Thread() {
            @Override
            public void run() {
                System.out.println("牛逼");
            }
        }.start();
        }
  • 带参数的构造方法
class Ter extends Thread{
    @Override
    //run方法里面的方法是线程的主方法
    public void run() {
        for (int i = 0; i <100; i++) {
            if(i%2==0){
                System.out.println(i);
            }
        }
    }
    public 
}
  • 接口创建多线程

用类来继承runable继承,在主方法中创建runable继承的类的对,在用这对象作为参数,去实现thead类。

public class Thread_runable {
    public static void main(String[] args) {
        Mythread_runable w=new Mythread_runable();
        Thread it1=new Thread(w);
        Thread it2=new Thread(w);
        Thread it3=new Thread(w);
        it1.run();
        it2.run();
        it3.run();
    }


}
class Mythread_runable implements Runnable{
    int ticket=100;
    @Override
    public void run() {
        while (true){
            if(ticket>0){
                System.out.println(Thread.currentThread().getName()+"卖出的车票"+ticket);
            }else {
                break;
            }
            ticket--;
        }
    }
}

用接口的方式建立买票窗口,可以满足只出现一个100的要求。

线程的命名

Thread currentThread();

返回当前线程,此方法为构造方法

void setName();

设置线程的名字

String getName();

返回当前线程的名字

设置线程运行的状态

  • 睡眠(sleep)与中断(interrupt)

sleep让线程出于堵塞,不运行的状态。

  • 等待(wait)和通知(notify)
  • 等待线程(join)和谦让(yield)

join是将线程加入主方法,yield取消当前线程的执行权利。
对于join()加入的方法,主线程会行执行加入的方法,在执行,其他方法。

线程的调度

  • 不同线程的优先级不同,对于优先级高的,会抢占低的资源,就会先运行。

-getpriority()与setpriority()