JAVA基础 多线程一

JAVA基础 多线程

多线程就是多任务执行,多路径执行。如果没有多任务执行的需求,就不需要多线程。

多线程的优点:
资源利用率更好
效率更高
多线程的缺点:
程序设计复杂
需要考虑可能会出现的数据不安全情况

线程和进程:

进程:每个进程都有独立的代码和数据空间(进程上下文)
进程间的切换会有较大的开销
一个进程包含1~n个线程
资源分配的最小单位

线程: 线程之间开销小
多个|一类线程共享进程的代码和数据空间
每个线程有独立运行栈和程序计数器(PC)
轻量级的进程
cpu调度执行的最小单位

并发和并行

并行一定是并发,而并发不一定是并行,也可能是串行
并发: 一个时间段内,程序拥有处理多任务的能力
并行: 一个时间段内,程序拥有同时处理多任务的能力

多线程目标

​ 创建与开启
​ 线程状态
​ 线程安全
​ 线程通信

线程的创建方式:

​ 1.继承Thread类,重写run()方法,方法内定义线程体 + start()

先定义一个类,继承Thread类,然后重写run方法。之后在主函数中调用新建对象,调用其start方法。

public class ThreadDemo01 extends Thread {

    /*
        定义线程体
     */
    @Override
    public void run() {
        for(int i = 1;i<=20;i++){
            System.out.println("一边敲代码..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        //创建一个线程
        ThreadDemo01 th = new ThreadDemo01();
        //开启线程
        //th.run();  方法的调用
        th.start();  //开启线程 jvm调用run()方法

        //默认主线程
        for(int i = 1;i<=20;i++){
            System.out.println("陪女朋友聊天..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

​ 2.实现Runnable接口 ,重写run()方法,方法内定义线程体 + start() -->推荐

上面第一种如果继承Thread后,就不能再继承其他类了,而接口是可以多实现的,因此是建议使用Runnable接口。

​ 使用:实现Runnable接口后,创建实现类的对象,(因为start是Thread的方法,所以…)创建Thread的对象,使用Thread的start方法。

public class ThreadDemo02 implements Runnable{

    @Override
    public void run() {
        for(int i = 1;i<=20;i++){
            System.out.println("一边打游戏..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        //创建线程
        ThreadDemo02 th = new ThreadDemo02();
        Thread t = new Thread(th);



        //开启线程
        t.start();

        for(int i = 1;i<=20;i++){
            System.out.println("一边陪女朋友..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }


    }
}

Thread.sleep(2);是执行完后停2毫秒,因为我们所写的程序代码不是很多,系统会一下子就执行完毕,停2毫秒,可以让我们更好的看出多线程的作用。

​ 3.Callable接口,重写call方法,方法中定义线程体–>了解
call()可以抛出异常,可以存在返回值
run()不能抛出异常,不能存在返回值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值