多线程(一)

多线程(一)

一、定义

线程:程序中执行的顺序流

多线程:多任务执行,多路径执行

​ 多任务之间可以实现同步执行

二、优缺点

优点:提高效率,提高性能

缺点:设计更复杂,可能会造成数据不安全的问题

三、进程和线程

进程和线程的区别:

进程:资源分配的最小单元,每个进程都有自己的代码与数据空间(进程上下文),进程之间的切换资源消耗大

线程:cpu调度与执行的最小单位,一个进程至少包含1~n个线程,同一个进程的多个线程共享这个进程的代码数据空间,每个线程都有自己的运行栈与程序计数器,线程的切换消耗小

四、线程的创建方式

1.继承Thread类,重写run() + start()开启线程

2.实现Runnable接口,重写run() + start()开启线程

优点 :

​ 接口多实现,类只能单继承

​ 实现资源共享

3.实现juc包下Callable接口,重写call() + 线程池 --> 了解

五、如何创建线程

1、继承Thread类

package class0310Test;

public class Class0101Test extends Thread{
    //重写run方法
    public void run(){
        for(int i=1;i<5;i++){
            System.out.println("eat");
            //由于输出执行的速度很快所以要让程序进入休眠才能看出效果
            try {
                //让该线程进入1毫秒的休眠
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args){
        //创建主线程
        //由于Class0101Test继承自Thread就是一个多线程类所以可以直接用
        Class0101Test th = new Class0101Test();
        //开启线程
        //告诉CPU我们的线程可以被调用
        th.start();
        
        //按同样的方式写第二个线程来看结果
        for (int i=1;i<5;i++){
            System.out.println("drink");
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

2、实现Runnable接口

package class0310Test;

public class Class0102Test implements Runnable{
    //推荐使用此方法因为只能单继承但是可以用接口多实现,且接口可以实现资源共享
    //使用实现接口的方法时,一定会重写run()方法,不然会报错
    public void run(){
        for (int i=1;i<5;i++){
            System.out.println("eat");
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args){
        //由于是实现所以得先创建一个Class0102Test类型的对象
        //再把这个对象带入到新建的Thread类型对象中才能实现start方法开启线程
        Class0102Test ct = new Class0102Test();
        Thread th = new Thread(ct);
        th.start();
        for(int i=1;i<5;i++){
            System.out.println("drink");
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值