实现多线程的两种方式

简述

在程序中,靠一个线程执行任务是比较缓慢的。有时,我们需要开启多线程,并发处理,提高程序的执行效率。

进程和线程

对于一个应用程序而言就是一个进程,当我们打开任务管理器的时候,可以看见每个运行的程序(进程)详情。线程是进程的最小执行单元,一个进程最起码有一个线程(主线程),可能会有多个线程。

实现多线程的两种方式

1.直接继承Thread

创建一个类继承Thread并重写run方法

package MyThread;

public class MyThread extends Thread {
    private String host;
    private int num=100;
    public MyThread() {    }
    public MyThread(String host) {
        this.host = host;
    }
    @Override
    public void run(){
        while (num>0){
//            try {
//                Thread.sleep(10);       //线程休眠等待
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
            System.out.println(this.host+"卖出了第"+num--+"张票!");
        }
    }
}

创建一个测试类

package MyThread;

public class Text {
    public static void main(String[] args) {
        MyThread qq=new MyThread("QQ");  //创建线程 
        MyThread weixin=new MyThread("微信");
        MyThread zfb=new MyThread("支付宝");
        qq.start();//开启线程
        weixin.start();
        zfb.start();
    }
}

运行结果:


对于这个程序,一共有四个线程:main方法(主线程),qq,weixin,zfb。线程有4中状态:创建,就绪(调用start()后线程并不会马上执行,而是抢到CPU的时间片后,才会去执行),执行,阻塞。当我们创建线程后,然后调用start(),并没有直接的去调用run()方法。当我们调用start()就创建了一个线程,如果这个线程抢到CPU的时间片,就可以运行run()中的代码,不需要等待run()运行完毕,其他地方的代码也可以运行。如果直接调用run(),就相当于调用普通方法一样。

2.实现Runnable接口。

实现Runnable接口,并重写run()

package MyThread;

public class Thread_Runnable implements Runnable {
    private String host;
    private int num=100;
    public Thread_Runnable() {    }
    public Thread_Runnable(String host) {
        this.host = host;
    }
    @Override
    public void run(){
        while (num>0){
            System.out.println(this.host+"卖出了第"+num--+"张票!");
        }
    }
}

测试类

package MyThread;

public class Text {
    public static void main(String[] args) {
       Thread thread1=new Thread(new Thread_Runnable("QQ"));//Thread构造方法里面有个是传入Runnable对象
       Thread thread2=new Thread(new Thread_Runnable("微信"));
       Thread thread3=new Thread(new Thread_Runnable("支付宝"));
       thread1.start();//开启线程
       thread2.start();
       thread3.start();
    }
}

总结:

对于这两种实现多线程的方式,一般推荐使用第二种(实现Runnable接口),因为Java是单继承,实现接口后,还可以有选择的继承其它类。


        每日鸡汤:付出不亚于任何人的努力!


Over!



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值