线程开启的三种方式

什么是进程?
正在执行的程序

什么是线程?
具有完成独立任务的一条执行路径

什么是多进程?
多个应用程序的集合

什么是多线程?
一个进程可以有一条线程,一个进程也可以有多条线程

多进程的好处?
能够合理的提高CPU的使用率 提高CPU的使用率

多线程的好处?
提高了进程和CPU的使用率

为什么需要开启多线程?什么时候开启线程?
1.能够让多个进程看上去像同时执行
2.防止单线程出现线程阻塞
3.用于处理耗时操作
场景:访问数据库 访问网络 更新界面。。。

其实多线程本质CPU还是按照顺序流来处理,只不过CPU的执行速度太快了,我们肉眼察觉不到,所以看起来像同时执行

线程的开启的三种方式

  1. 继承Thread类
/**
 * @author ZSL
 * @ClassName MyThread
 * @description
 * 第一种开启线程的方式
 * 继承Thread类,新建一个当前类对象,并且运行其start()方法
 * @date 2019/8/18
 */
public class MyThread extends Thread {

    public MyThread() {
    }

    public MyThread(String name) {
        super(name);
    }
    // Thread.currentThread()表示当前正在执行的是哪一条线程那么就是对应的那个线程的名称
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName() + ":" + i);
        }
    }


}

测试

/**
 * @author ZSL
 * @ClassName MyThreadTest
 * @description
 * @date 2019/8/18
 */
public class MyThreadTest {

    public static void main(String[] args) {
        MyThread my1 = new MyThread("线程1");
        MyThread my2 = new MyThread("线程2");


        // 开启线程
        my1.start();
        my2.start();

    }
}

结果
在这里插入图片描述

2. 实现Runnable接口

/**
 * @author ZSL
 * @ClassName Demo2_Thread
 * @description
 * 第二种开启线程的方式
 * 实现Runnable接口,然后新建当前类对象,
 * 接着新建Thread对象时把当前类对象传进去,
 * 最后运行Thread对象的start()方法
 *
 * @date 2019/8/18
 */
public class Demo2_Thread implements Runnable{

    private String str;

    public Demo2_Thread(String str) {
        this.str = str;
    }

    public Demo2_Thread() {
    }

    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(i + str + " run()...");
        }
    }
}

测试

/**
 * @author ZSL
 * @ClassName MyThreadTest
 * @description
 * @date 2019/8/18
 */
public class MyThreadTest {

    public static void main(String[] args) {
        new Thread(new Demo2_Thread("线程1")).start();
        new Thread(new Demo2_Thread("线程2")).start();
    }
}

结果
在这里插入图片描述

3. 实现Callable接口

/**
 * @author ZSL
 * @ClassName Demo3_Thread
 * @description
 * 第三种开启线程的方式
 *
 * 实现Callable接口,新建当前类对象,
 * 在新建FutureTask类对象时传入当前类对象,
 * 接着新建Thread类对象时传入FutureTask类对象,
 * 最后运行Thread对象的start()方法
 * @date 2019/8/18
 */
public class Demo3_Thread implements Callable {

   private String string;

    public Demo3_Thread(String string) {
        this.string = string;
    }

    public Demo3_Thread() {
    }

    @Override
    public Object call() throws Exception {
        for (int i = 0; i < 1000; i++) {
            System.out.println(i + string +" call()...");
        }
        return null;
    }
}

测试

/**
 * @author ZSL
 * @ClassName MyThreadTest
 * @description
 *
 * @date 2019/8/18
 */
public class MyThreadTest {

    public static void main(String[] args) {
        Callable callable1 = new Demo3_Thread("线程1");
        Callable callable2 = new Demo3_Thread("线程2");

        FutureTask futureTask1 = new FutureTask(callable1);
        FutureTask futureTask2 = new FutureTask(callable2);

        Thread thread1 = new Thread(futureTask1);
        Thread thread2 = new Thread(futureTask2);

        thread1.start();
        thread2.start();
    }
}

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

偷偷学习被我发现

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

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

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

打赏作者

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

抵扣说明:

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

余额充值