Java多线程

1.进程:exe文件相当于进程
eg: .java 编译 .class 然后windows启动虚拟机JVM 加载class文件并运行,会创建javaw.exe进程(JVM虚拟机进程)
2.线程:进程的子任务,一个进程内,多个线程共享相同的的内存和为文件资源,
3.多线程技术:同一时间执行更多不同的任务,
4.多线程使用场景:
1.阻塞:系统阻塞,多线程,提高效率
2.依赖:业务有2个执行过程, a堵塞,b的执行不依赖a的结果,可以多线程提高效率,如果依赖a的结果,不能多线程。
单核多核
单核CPU:假的多线程,一个时间单元 只能执行一个任务,因为CPU时间特别短,所以感觉不出来
多核CPU: 至少3个线程,主线程,垃圾回收线程,异常处理线程。
并发并行
并行:多个cpu同时进行多个任务
并行:一个cpu同时执行多个 任务 秒杀

5.多线程编程的方式:
1.继承Thread类
2.实现Runnable接口
6.特点——随机性
多线程代码运行结果和代码执行顺序或调用顺序无关,线程是子任务,cpu以不确定方式,随机时间调用线程中的run方法。
7.效率
时间片——cpu分配给各个程序的时间。
cpu在不同的线程切换需要耗时,线程越多,软件执行效率变低。
8.执行start()

Thread类的常用方法

1.start(): 启动当前线程,调用当前线程的run()方法
在这里插入图片描述

2.run(): 通常需要重写Thread方法类中的run()方法,写线程的内容
在这里插入图片描述

3.getname()获取/setname()设置 线程名字
在这里插入图片描述
4.yield() //让步,暂停正在执行的线程,把执行让给优先级更高的线程
5.join() //线程a调用线程b的join(),a进行堵塞,b执行完,结束堵塞,a再执行。
6.stop()强制线程结束
7.sleep()当前线程睡眠ms

获取和设置优先级
1.获取优先级
getPriority()
setPriority()
注释:高优先级高概率执行,不意味高优先级先执行

实现Runnable接口
1.创建runnable接口的类
2.实现类实现runnable的抽象方法:run()
3.创建实现类的对象
4.把这个对象作为参数
在这里插入图片描述
eg(买票):

1.继承Thread类


class Mythread extends Thread
{
    public static int ticket=100;
            public void run()
            {
             //卖票
             while (true)
             {
                 if(ticket>0)
                 {
                     System.out.println(Thread.currentThread().getName()+"卖票 票号:"+ticket);
                     ticket--;
                 }
                 else
                 {
                     break;
                 }
             }
            }
    public void setname(String 窗口1) {

    }
}



public class test {
    public static void main(String[] args) {
        Mythread a=new Mythread();
        Mythread b=new Mythread();
        Mythread c=new Mythread();
        a.setname("窗口1");
        b.setname("窗口2");
        c.setname("窗口3");

        a.start();
        b.start();
        c.start();
    }

}

2.实现Runnable接口


class Mythread extends Thread
{
    public static int ticket=100;
            public void run()
            {
             //卖票
             while (true)
             {
                 if(ticket>0)
                 {
                     System.out.println(getName()+"卖票 票号:"+ticket);
                     ticket--;
                 }
                 else
                 {
                     break;
                 }
             }
            }
    public void setname(String 窗口1) {

    }
}



public class test {
    public static void main(String[] args) {
        Mythread a=new Mythread();
        Mythread b=new Mythread();
        Mythread c=new Mythread();
        a.setname("窗口1");
        b.setname("窗口2");
        c.setname("窗口3");

        a.start();
        b.start();
        c.start();
    }

}

比较创建线程的2种方式
优先选择实现runnable 类
1.实现的方式没有类单继承的局限
2.实现方式更适合处理多个线程有共享数据的情况

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值