线程
文章平均质量分 56
哥是传说!!!
不要迷恋哥,哥只是个传说
展开
-
线程等待通知机制
在上述代码中,由于t2线程需要打开输入资源流,所以t1大概率比t2先拿到锁,当t1拿到锁后t1执行wait,t1线程释放锁,然后执行t2线程。等到t2线程来唤醒t1线程的时候,线程t1进入就绪状态,当t2释放锁后,拿到锁继续执行。通过条件判定当前逻辑是否能执行,如果不能执行就主动wait,把执行机会留给其他线程。等到时机成熟后,再由其他线程进行唤醒,进行线程的抢占执行。“线程饿死问题”,一个线程频繁的获取锁和释放锁,由于获取锁的速度太快,其他的线程抢不到,那么就会影响到代码的执行速度。原创 2024-04-06 15:59:48 · 255 阅读 · 0 评论 -
线程安全1.2(内存可见性问题)
在执行循环体的时候会将成员变量加载到cpu中,而从内存读取数据到cpu相对于cpu中的cmp来说执行速度是非常慢的,所以在cmp执行很多次后感受到cmp的内容并没有变化,于是就发生了编译器优化,只是在第一次进行了真正的load,后续代码执行到t2时就不再去load,用的就是第一次load的值。首相这两者是没有任何关系的,对于sychronized是将代码中的非原子性指令打包成一个整体,防止由于线程之间相互竞争特性而导致指令的执行顺序发生错误,导致代码bug。1.只可以对变量进行修饰,不可以对方法进行修饰。原创 2024-04-06 14:19:28 · 155 阅读 · 0 评论 -
线程安全问题1.0
线程安全的概念:如果多线程环境下代码运⾏的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。线程不安全的原因:1.线程调度是随机的这是线程安全问题的 罪魁祸⾸随机调度使⼀个程序在多线程环境下, 执⾏顺序存在很多的变数.程序猿必须保证 在任意执⾏顺序下 , 代码都能正常⼯作。2.多个线程同时修改同一个变量3.线程针对变量的修改操作,不是原子的4.内存可见性问题,引起的线程不安全5.指令重排序,引起的线程不安全首先上述代码必须有join,否则会脏读数据。原创 2024-03-31 23:07:23 · 296 阅读 · 0 评论