[Java] 多线程编程

0.前置知识

  • 接口

1.基本概念

一个人如何同时写完语文、数学、英语作业?

如果先写完语文,再写完数学,最后做完英语,那就不叫“同时”了。

要造出“同时”的假象,我们可以先随机摊开一本作业本(比如英语)做一道题,再随机摊开另一本(比如数学)做一道题,再再随机摊开一本(比如还是英语)又做了一道题,再再再随机摊开一本(比如语文)做了一道题,如此反复切换,最终陆陆续续做完了三本作业,这样我们就造出了“同时”完成作业的假象。

在多线程编程中,我们可以创建多个线程,把任务对象塞给这个线程去执行对象里的工作内容,然后cpu在多个线程之间高速来回随机切换,我们的计算机就仿佛在“同时”进行着多线程的工作。

Java的多线程设计为如下使用方式:

创建对象,这个对象所属的类要implements(实现)Runnable这个接口,具体的实现方式是在类中定义run()方法,用run()方法存储要完成的任务。

创建线程,把对象塞到这个线程的构造函数里。

口诀为:pv run(public void run())

2.多线程的基本使用

示例:

public class LearnMultiThreadings {
    public static void main(String[] args) {
        Mission m = new Mission();    //创建任务对象
        Thread t = new Thread(m);    //创建线程,并将任务对象放入此线程
        t.start();    //启动线程,这个线程将被随机执行
    }
}

class Mission implements Runnable {    //任务对象必须implements(实现)Runnable接口
    @Override
    public void run() {    //实现方式为定义run()方法,在其中定义任务内容,线程所做的工作就是推进这个run()方法
        ......
    }
}

创建多个线程,多线程执行的任务可以是同类的, 也可以是不同类的。

示例:

我们分别实例化了语文、数学、英语的任务,并放入三个线程,cpu只管随机执行这三个线程中的某个线程中对象的run()方法即可。

public class DoMyHomework {
    public static void main(String[] args) {

        // 1.创建任务
        Chinese c = new Chinese();
        Maths m = new Maths();
        English e = new English();

        // 2.创建线程并分配任务
        Thread t1 = new Thread(c);
        Thread t2 = new Thread(m);
        Thread t3 = new Thread(e);

        // 3.启动线程
        t1.start();
        t2.start();
        t3.start();
    }
}

class Chinese implements Runnable {
    @Override
    public void run() {
        for(int i = 0; i <= 100; i = i + 1) {
            System.out.println("做语文...进度" + i + "%");
        }
    }
}

class Maths implements Runnable {
    @Override
    public void run() {
        for(int i = 0; i <= 100; i = i + 1) {
            System.out.println("做数学...进度" + i + "%");
        }
    }
}

class English implements Runnable {
    @Override
    public void run() {
        for(int i = 0; i <= 100; i = i + 1) {
            System.out.println("做英语...进度" + i + "%");
        }
    }
}

运行结果:

做语文...进度0%
做英语...进度0%
做数学...进度0%
做英语...进度1%
做语文...进度1%
做英语...进度2%
做数学...进度1%
做英语...进度3%
做语文...进度2%

以下运行结果省略...

这样我们就营造出同时做语数外三种作业的效果来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值