Java中的多线程

本文介绍了Java中的多线程概念,包括进程、线程和时间片的基本理解。重点讨论了线程安全问题,特别是通过`synchronized`关键字实现的互斥锁机制,用于解决并发操作中的数据一致性问题。此外,还简述了线程池的作用,强调其在提高效率和统一管理线程方面的价值。
摘要由CSDN通过智能技术生成

Java中的多线程

1.引言

什么时进程:

​ 进程对于计算机就是一个独立的程序,例如QQ 、微信、谷歌浏览器等

什么是线程:

​ 每一个进程中包含很多不同的功能,例如QQ中包含聊天、语音、视频等不同的功能,这些功能就是一个个的线程

什么是时间片:

​ 时间片”是分时操作系统分配给每个正在运行的进程微观上的一段CPU时间(在抢占内核中是:从进程开始运行直到被抢占的时间)。现代操作系统允许同时运行多个进程 —— 例如,你可以在打开音乐播放器听音乐的同时用浏览器浏览网页并下载文件。事实上,虽然一台计算机通常可能有多个CPU,但是同一个CPU永远不可能真正地同时运行多个任务。在只考虑一个CPU的情况下,这些进程“看起来像”同时运行的,实则是轮番穿插地运行,由于时间片通常很短,用户不会感觉到。

多线程

2. Java中的多线程

2.1 java中的多线程

public static void main(String[] args) {
    Thread thread1 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("线程1执行的任务");
        }
    });
    Thread thread2 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("线程2执行的任务");
        }
    });
    thread1.start();
    thread2.start();
}

2.2 线程安全

​ 当多个线程同时对一个数据进行操作时,需要考虑线程安全,例如,用户1的钱只够买一件商品,在线程1执行买商品同时,查询金钱足够购买上篇,此时线程2开始执行买商品,此时金钱尚未扣除,线程2发现金钱足够,依旧执行,就会发生一份钱买两份商品的情况。

​ Java中使用synchronized (mutex)加锁的方式来解决类似问题,被加所的方法在只允许一个线程对象执行,一旦有一个线程执行代码块的内容,其他线程进入阻塞等待状态

class MyRunnable implements Runnable{
    @Override
    public void run() {
        synchronized ("锁对象"){
            System.out.println("进行加锁的代码");
        }
    }
}

Thread thread = new Thread(new MyRunnable());
thread.start();

2.3 synchronized (mutex) 中mutex锁对象的作用

​ 当生产者线程和消费者线程同时对一个商品进行操作时,防止出现生产过多或者货不应求的情况,需要对两个线程的共同资源进行一个联系,即当商品充足时消费者线程工作,当商品不足时生产者线程工作。因此,使用商品对象作为同步代码块的锁对象,将两个线程进行通信

3.线程池

使用线程池,对线程进行统一管理,减少线程的创建与销毁操作,从而提高效率

3.1相关方法

//创建线程池,初始线程容量为5
ExecutorService threadPool = Executors.newFixedThreadPool(5);
//提交任务
threadPool.submit(() -> System.out.println(Thread.currentThread().getName() + " : Lambda表达式提交线程任务"));
//关闭线程池,保留正在执行的线程对象
threadPool.shutdown();
//关闭线程池,释放所有线程对象
threadPool.shutdownNow();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值