Java中Thread类(多线程实现的第一种方式)

实现多线程程序的步骤:

 1)将类声明为 Thread 的子类
 2)该子类应重写 Thread 类的 run 方法(run()方法里面应该是一些耗时的操作,IO操作/循环语句)
 3)在主线程进行该自定义的线程类的对象的创建

注意:直接适用对象调用run方式时,算是普通方法的调用

Thread实现了Runnable接口


自定义类的程序示例
public class MyThread extends Thread {
    public MyThread() {
        
    }
    
    public MyThread(String name) {
        super(name) ;
    }

    @Override
    public void run() {
        ……………………
        }
    }
}
测试类的程序示例
public static void main(String[] args) {
    //执行线程不是run方法 ,run方法的调用相当于一个普通方法的调用
    /*public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
    结果是两个线程并发地运行*/        
    MyThread t1 = new MyThread() ;
    t1.start();
    MyThread t2 = new MyThread() ;
    t2.start();        
}

Thread的构造方法


public Thread()
分配新的 Thread 对象。

public Thread(String name)
分配新的 Thread 对象。
name - 新线程的名称。

Thread提供的一些方法


public void start()
使该线程开始执行;Java 虚拟机调用该线程的 run 方法。(如果一个线程被多次执行则会报错IllegalThreadStateException:非法状态异常,同一个线程只能被执行一次)

public final void setName(String name)
改变线程名称,使之与参数 name 相同。
name - 该线程的新名称。

public final String getName()
返回该线程的名称。
 
public static Thread currentThread()
返回对当前正在执行的线程对象的引用。(一般和getName一起使用,返回的就是当前执行的线程对象的名称)

public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程。(守护线程不会立即结束掉,它会执行一段时间在结束掉)
示例程序
public static void main(String[] args) {        
    //创建两个子线程
    ThreadDaemon td1 = new ThreadDaemon() ;
    ThreadDaemon td2 = new ThreadDaemon() ;        
    td1.setName("1");
    td2.setName("2");        
    //在启动之前,设置为守护线程,守护的是主线程
    td1.setDaemon(true);
    td2.setDaemon(true);    
    td1.start();
    td2.start();         
    Thread.currentThread().setName("3");  
    for(int x =0 ; x < 5 ; x ++) {
        System.out.println(Thread.currentThread().getName()+":"+x);
    }  //主线程结束,1和2线程也随之结束,但是不会立即结束,会继续运行一小段时间
}
public final void setPriority(int newPriority)
更改线程的优先级(IllegalArgumentException - 如果优先级不在 MIN_PRIORITY 到 MAX_PRIORITY 范围内。)
     public static final int MAX_PRIORITY 10         最大优先级
     public static final int MIN_PRIORITY 1            最小优先级
     public static final int NORM_PRIORITY 5        默认优先级

public final int getPriority()
返回线程的优先级。(默认为5,优先级越大被执行的概率越高)

public final void join() throws InterruptedException
等待该线程终止。 (这个线程执行完之后才会执行其他线程)

public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。

public static void sleep(long millis) throws InterruptedException
线程睡眠【调用不会释放锁】(暂停执行)
millis - 以毫秒为单位的休眠时间。

public final void wait() throws InterruptedException
当前线程等待【调用立即释放锁】(继承Object类的方法)

public void interrupt()
中断线程。【中断状态设为true】 (通知线程应该中断了,具体到底中断还是继续运行,应该由被通知的线程自己处理。)

public static boolean interrupted()
测试当前线程是否已经中断。
程序示例:
Thread t1 = new Thread( new Runnable(){
    
   public void run(){
        
      // 若未发生中断,就正常执行任务
        
      while(!Thread.currentThread.isInterrupted()){
 
           // 正常任务代码……
       
      }

        
      // 中断的处理代码……
        
      doSomething();
    
   }

} ).start();
public final void stop()
强迫线程停止执行。【方法已过时】(强制停止)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值