Java基础:继承Thread类的方式创建多线程

多线程

java语言的JVM允许程序运行多个线程。它可以通过java.lang.Thread类来实现

  • 新建一个类继承于Thread类–重写Thread类中的run()方法,在该方法中写需要多线程执行的方法体,在main()方法中调用Thread类中的start()方法

代码示例

package thread;

/**
 *
 * 多线程的创建:
 * 方式一:继承于Thread类
 *(1)创建一个继承于Thread类的子类
 *(2)重写Thread类的run()--->将此线程执行的操作声明在run()中
 *(3)创建Thread类的子类的对象
 * (4)通过对象调用start()
 * @param args
 *
 * Created by KingsLanding on 2022/3/8 19:12
 */
public class ThreadTest {
    public static void main(String[] args) {
        MyThread m1 = new MyThread();//new一个Thread的子类的对象
        
        //调用Thread类中的start()方法;启动当前线程,调用当前线程的run()
        //不用等待,新建了一个线程,并行运行,输出Thread-i,即在Thread线程中执行
        m1.start();
        //一个对象只能调用一次start()
        
        //不能通过直接调用run()的方式启动线程,这种方式仍然是在主线程中运行,输出main-i
        m1.run();
        
        //以下操作任然在主线程中
        for(int i=0;i<=100;i++){
            if(i%2==0){
                //输出main-i
                System.out.println(Thread.currentThread().getName()/*获取线程的名字*/+"-"+i);
            }
        }
    }
}
//创建一个继承于Thread类的子类
class MyThread extends Thread{
   //重写Thread类的run()方法

    @Override
    public void run() {
        //遍历0-100的偶数
        for(int i=0;i<=100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()/*获取线程的名字*/+"-"+i);
            }
        }
    }
}

Thread的常用方法

package thread;

/**
 * 测试Thread类中的常用方法:
 * 1.start();启动当前线程,调用当前线程的方法体run()
 * 2.run();重写Thread类中的run()方法,将需要线程实现的方法体写在其中
 * 3.currentThread();静态方法,返回执行当前代码的线程
 * 4.getName();获取当前线程的名字
 * 5.setName();设置当前线程的名字:在调用之前设置【对象.setName("名称")】;
 * 给主线程改名【Thread.currentThread.setName("名称")】
 * 6.yield():释放当前CPU的执行权
 * 7.join():掐断原本的线程,切换到其他线程,执行完后再返回调用
 * 在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到b线程执行完再执行a
 * 8.stop();已过时,执行此方法时,强制结束当前线程
 * 9.sleep(long millitime);阻塞,在指定的millitime毫秒时间内,当前线程阻塞状态
 * 10.isAlive();判断当前线程是否存活
 *
 *
 * Created by KingsLanding on 2022/3/9 13:51
 */
public class ThreadTest02 {
    public ThreadTest02() {
    }

    public static void main(String[] args) {

        Mythread m1 = new Mythread();

        m1.setName("线程-1");
        m1.start();

        //改主线程的名字
        Thread.currentThread().setName("主线程-2");
        for(int i=0;i<=100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()+"/*****/"+i);
            }
            
            //强行换路
            if(i==50){
                try {
                    m1.join();//该条件触发时,掐断原本的线程,切换到其他线程,
                             // 直到那个线程执行完成后再调用本身这个线程
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
    }
}
class Mythread extends Thread{
    @Override
    public void run() {
        for(int i=0;i<=100;i++){
            if(i%2 != 0){

                //sleep阻塞线程,单位毫秒
                try {//快捷键:ctrl+alt+T
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                }

                System.out.println(Thread.currentThread().getName()+"/*****/"+i);
            }
            if(i%10==0){
                yield();//当i可以除以10 线程主动停止一下,但仍然会再次调用线程
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King'sLanding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值