当前位置: 首页 > news >正文

小白学习java第11天(下):多线程详解

1.线程同步*(重点)【由于同一进程的2多个线程共享同一快存储空间,在带来方便的同时,也带来了访问冲突的问题,为了保证数据在方法中被访问的正确性,在访问加入锁机制synchronized,当一个线程对象获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可,但是存在一下问题就是:

1.一个线程持有锁会导致其他所需要此锁的线程挂起

2.在多线程竞争,加锁,释放锁会导致比较多的上下文切换和调度延时引起的性能问题

3.比如优先级高的等优先级低的释放锁,就会导致优先级倒置,引起性能问题,【安全和性能不能兼得】】

并发,多个线程执行同一个对象!处理多线程问题时,多线程访问同一个对象,并且某些线程还想修改这个对象,这个时候我们就需要线程同步,线程同步其实是一种等待机制,多个需要同时访问此对象的线程进入这个对象等待池形成队列,等待前面线程使用完毕,下一个线程在使用。

上述就出现这个问题,怎么感觉一个对象被多个使用呢,(那么这就出现一个类似于这样:你存在银行500,你去取了500,你对象也去取了500,那这样银行不是亏死了!,所以我们要保证就是类似于等待状态!你弄完我才开始弄)

下面就对其进行原理分析图:

(注意这里有个小细节,就是你CPU给每个线程都是分配时间的,如果你的操作不需要很复杂,那么在第一个进去的时候可能就把对象解决了(票取完了))

因此我需要在方法里面进行sleep一下,久一点嘛这样就不至于在CPU给他分配的时间内,就已经处理完事情了

死锁:某个同步块同时有“两个及其以上的对象锁”,就有可能发生“死锁”问题

那么解决办法也很简单,就是你要去拿别人的锁!!!

因此如何避免死锁:

1.一个资源只能被一个进程使用(一夫一妻)

2.一个进程因请求资源而堵塞时,对方获得资源保持不放(遇到困难,仍然坚定忠诚)

2.进程已获得资源,在未使用之前,不能强行剥夺(法律保护,不能强抢民女)

3.若干进程之间形成一种头尾相接的循环等待资源关系(离了婚才能在结)

2.线程池:就是经常创建和销毁,使用特别大的资源,比如并发情况下的线程,对性能影响很大,因此我们需要提前创建好多线程,放入线程池中

package demo01;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test03 {
    public static void main(String[] args) {
        //创建线程池
        ExecutorService service = Executors.newFixedThreadPool(10);

        //添加进去
        service.execute(new MyThread());
        service.execute(new MyThread());
        service.execute(new MyThread());
        service.execute(new MyThread());

        //关闭
        service.shutdown();
    }
}
class MyThread implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}

相关文章:

  • MergeX亮相GTC2025:开启全球广告流量交易新篇章
  • ​asm汇编源代码之-汉字点阵字库显示程序源代码下载​
  • JAVA——初识JAVA
  • Java学习手册:Java异常处理机制
  • 前端防御性编程
  • java数组08:稀疏数组
  • 【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【论文篇+改进】A题解题全流程(持续更新)
  • 高并发秒杀系统如何锁住库存
  • C语言数字图像处理---Gabor滤波器
  • JAVA学习-练习试用Java实现“实现一个Java程序,对大数据集中的数据进行类型转换”
  • 关于 C++ 中 cin 对象和 EOF 的详细解释
  • 学习Mysql对库和表的操作以及对数据的操作
  • 【Linux内核】ATT汇编编程练习
  • 【特权FPGA】之PS/2键盘解码
  • 小白学习java第12天(下):网络编程
  • 第1个小脚本:英语单语按字母个数进行升序排序
  • Spark Core(2)
  • Java学习打卡-Day25-注解和反射、Class类
  • 除了 `task_type=“SEQ_CLS“`(序列分类),还有CAUSAL_LM,QUESTION_ANS
  • 分布式系统-脑裂,redis的解决方案
  • 深圳商城网站设计电话/手机app软件开发
  • 如何用jsp做简单的网站/种子库
  • 色情网站是怎么建设的/学网络运营在哪里学比较好
  • 专门做装修的网站/网络公司取什么名字好
  • ui设计作品欣赏网站/惠州seo报价
  • 网站建网站/开发一个网站的步骤流程