Thread与Runnable

Thread:

一.Thread线程的创建(四大步骤):

1.新写一个类(MyThread)继承Thread类:

class MyThread extends Thread{
}

2.重写run() 方法,完成线程要执行的任务(ctrl+o或者alt+shift+s快捷键实现run() 方法):

    @Override
    public void run() {
    }

3.创建自定义线程类对象(在main方法里写):

      MyThread myThread1=new MyThread();

4.调用start()方法启动线程:

        myThread1.start();

我们来看一个案例:

        //1.继承Thread类,重写run方法,完成线程要执行的任务
class MyThread extends Thread{
    //2.重写run方法,完成线程要执行的任务
    @Override
    public void run() {
        for (int i=0;i<=20;i++){
            try {
                sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
          //System.out.println(Thread.currentThread().getName()+"---"+i);
            System.out.println(super.currentThread().getName()+"---"+i);//获取当前线程名
        }
    }
}
public class ThreadTest {
    public static void main(String[] args) {
        //3.创建自定义线程类对象
        MyThread myThread1=new MyThread();
        //4.调用start()方法启动线程
        myThread1.start();


        MyThread myThread2=new MyThread();
        myThread2.start();
    }
}

运行结果如下:在这里插入图片描述

二.Thread类的方法

编号方法说明
1public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
2public void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
3public static Thread currentThread()返回对当前正在执行的线程对象的引用。
4public void interrupt()中断线程。
5public final boolean isAlive()测试线程是否处于活动状态。
6public static void yield()暂停当前正在执行的线程对象,并执行其他线程。
7ublic static void sleep(long millisec)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
8public final void setPriority(int priority)更改线程的优先级。
9public final void setName(String name)改变线程名称,使之与参数 name 相同。
10public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。
11public final void join(long millisec)等待该线程终止的时间最长为 millis 毫秒。

Runnable:

一.Runnable线程的创建(五大步骤):

1.实现Runnable接口:

class MyRunnable implements Runnable{
}

2.覆盖run()方法:

    @Override
    public void run() {
    }

3.创建一个的实例如 task:(写在main方法里)

        MyRunnable task=new MyRunnable();

4.通过(task)对象来创建Thread对象

       Thread thread=new Thread(task);

5.启动线程

        thread.start();

我们再继续来看一个案例:

//1.实现Runable接口
class MyRunnable implements Runnable{
//2.覆盖run()方法
    @Override
    public void run() {
        for (int i=0;i<=20;i++){
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"----"+i);//获取当前线程名
        }

    }
}
public class RunnableTest {
    public static void main(String[] args) {
        //3.创建MyRunnable的实例
        MyRunnable task=new MyRunnable();
        //4.通过task对象来创建Thread对象
        Thread thread1=new Thread(task);
        //5.启动线程
        thread1.start();


        Thread thread2=new Thread(task);
        thread2.start();

    }
}

运行结果如下:
在这里插入图片描述

Thread和Runnable的区别:

一.相同点:

都重写了run() 方法,调用start方法启动.。

二.不同点:

1.继承Thread类方式,那么这个类就不能再继承别的类,有局限性。
2.实现Runnable接口,还可以继承别的类,避免了单继承的局限性,所以常用Runnable接口

线程的生命周期:

1.新建:新创建了一个线程对象。
2.就绪态:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。
3.运行:可运行状态的线程获得了cpu 时间片,执行程序代码。
4.阻塞:阻塞状态是指线程因为某种原因放弃了cpu 使用权,暂时停止运行。直到线程进入可运行状态。
5.死亡:线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值