![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaEE
文章平均质量分 95
JavaEE学习总结
CodeKnightShuai
这个作者很懒,什么都没留下…
展开
-
Java锁策略
触发锁冲突的频率,HashTable是针对整个哈希表加锁,任何的增删改查操作都会触发加锁,也就都可能会有锁竞争【其实没必要把锁加的这么勤快,因为有时候不存在线程安全的问题,但是由于synchronizd是加到this上,仍然会针对同一个对象产生锁竞争,产生阻塞等待】;比较不成功,意味着owner非空,锁已经有线程持有了,此时CAS就啥都不干,直接返回false,循环继续进行,循环转的飞快,不停的尝试询问这里的锁是不是释放了。一旦锁被释放,就能第一时间拿到锁,速度更快(忙等,消耗cpu资源)。原创 2023-04-10 22:46:35 · 384 阅读 · 1 评论 -
Java线程安全与等待通知
②synchronized (),括号()中表示锁对象,在针对哪个对象加锁,如果2个线程针对不同对象加锁,此时不会存在锁竞争,各自获取各自的锁即可;编译器执行代码的时候对代码进行优化,有些操作下频繁读取内存,但是读取的结果不变,则优化成只从寄存器去读,不从内存中读。注:如果某个操作对应多个cpu指令,大概率不是原子的,正是因为不是原子的,导致两个线程的指令排序存在更多的变数了。谈到优化,都得保证优化之后的结果和之前是不变的,在单线程的情况下容易保证,但是在多线程的情况下就不好说了。原创 2023-04-03 10:38:19 · 354 阅读 · 0 评论 -
Thread类的用法
【如果是t1线程中调用t2.join,即让t1线程等待t2先结束】,在t.join执行的时候,如果t线程还没结束,那么main线程就会阻塞等待,其他的线程不受影响。2、清空标志位为false。分析:上述t线程没有进行任何循环和sleep,意味着里面的代码会迅速执行完毕,main线程如果slwwp结束,此时t基本上就是已经执行完了的状态,那么。②run方法表示(线程启动之后要执行的逻辑):线程的入口方法,线程启动起来要执行哪些逻辑,不是让程序员调用的,而是交给系统去自动调用的。原创 2023-03-31 10:40:10 · 331 阅读 · 0 评论 -
Java 进程和线程概念
点击这里运行程序,实际上是idea对应的进程,创建了一个java进程,这个java进程来执行程序员写的代码,再这个java进程里面有2个线程,一个是main线程,一个是t线程,2个线程并发执行 ”每个线程是一个独立的执行流“,至于先打印t还是先打印m是不确定的,因为多个线程再cpu上调度执行的顺序是随机的。分析:创建新线程的时候,传入了一个实例化类的对象,并且这个类实现了Runnable接口重写了run方法。注意:start会创建新的线程,而run不会创建新的线程,②通过t.start创建的新的线程。原创 2023-03-30 18:20:07 · 787 阅读 · 0 评论