
java
文章平均质量分 71
sziitjin
安卓App开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 并发编程--Volatile、Synchronized和锁
偏向锁,顾名思义,它会偏向于第一个访问锁的线程,如果在运行过程中,同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步的,减少加锁/解锁的一些CAS操作(比如等待队列的一些CAS操作),这种情况下,就会给线程加一个偏向锁。但是如果锁的竞争激烈,或者持有锁的线程需要长时间占用锁执行同步块,这时候就不适合使用自旋锁了,因为自旋锁在获取锁前一直都是占用cpu做无用功,占着XX不XX,线程自旋的消耗大于线程阻塞挂起操作的消耗,其它需要cup的线程又不能获取到cpu,造成cpu的浪费。原创 2023-08-15 21:01:08 · 201 阅读 · 0 评论 -
Java 并发编程--阻塞队列和线程池
1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度。在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。原创 2023-08-14 21:49:18 · 1123 阅读 · 0 评论 -
Java 并发编程与CAS基本原理
假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是有的时候我们的需求并非这么简单,我们需要更有效,更加灵活的机制,synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁,这里会有些问题:首先,如果被阻塞的线程优先级很高很重要怎么办?原创 2023-08-13 23:01:22 · 214 阅读 · 0 评论 -
Java程序设计六大原则&设计模式
一个接口或者类只有一个原因引起变化,即一个接口或者类只有一个职责,负责一件事情。(此原则同样适用于方法)好处:1、复杂性降低;2、可读性提高;3、可维护性提高;4、变更风险降低。原创 2023-07-24 20:59:01 · 1557 阅读 · 0 评论 -
算法-快速排序
快速排序,顾名思义就是能够将序列快速排序的方法,在同为O(N*logN)的几种排序方法中效率较高的。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。快速排序的核心思想:1、先从数组中随机选取一个数作为基准数,一般默认为数组的第一个数,即arr[0];2、分区,将基准数移到序列中间的某个位置,并实现基准数左边的数小于等于基准数,基准数右边的数大于基准数;3、将基准数左右两边的序列当成两个原创 2021-03-10 18:07:12 · 159 阅读 · 0 评论 -
算法-选择排序
选择排序,先从未排序的序列中找出最小的元素,放在序列的首位(最小元素跟首位互换位置);再从剩余的未排序的序列中找出最小的元素,将其放在已排序的序列后面(最小元素跟剩余的未排序序列的首位互换位置),一直重复,直到排序完成。假设数组arr={3,9,1,7,8,4,2,5,6},我们通过选择排序来把该数组从小到大排序,1.从未排序的数组arr中找出最小的元素1,放置首位,即arr[0]跟arr[2]互换位置,结果:arr={1,9,3,7,8,4,2,5,6}2.从未排序的{9,3,7,8,4,2,5,原创 2021-03-05 16:29:54 · 208 阅读 · 0 评论 -
算法-二分法算法。
二分法,顾名思义,就是把数组的所有元素一分为二,即从中间切开将数组分为两段,通过对比要查找的元素跟中间元素的大小来判断,要查找的元素在哪一段数组中,每次查询便能将数组的查询范围缩短一半。用于大数据的查询时,能够大大的提高查询效率。我们用数据来表述一下上面的描述:从数组arr={1, 2, 3, 4, 5, 6, 7, 8, 9}中查找出8的位置。1.将数组一分为二,low为数组的开始位置,low = 0;leight为数组的末尾位置,leight = 数组长度-1 = 8;mid为数组中间位置(数原创 2021-03-05 15:13:36 · 2813 阅读 · 0 评论 -
算法-冒泡排序
冒泡排序是最简单的排序算法,核心思想也很简单,就是:对比相邻的两个数字,如果第一个数比第二个数大,则交换这两个数的位置;比如排序32,3跟2比较,3比2大,则互换位置为23。1、简单实现:现在我们通过代码现实一下数组{1,3,2,7,5,4,8,9,6}的排序:/** * 冒泡排序 */ public void bubbleSort() { int[] arr = {1, 3, 2, 7, 5, 4, 8, 9, 6}; for (int原创 2021-03-04 17:18:10 · 1373 阅读 · 1 评论 -
Java split()用法,使用特殊字符要注意了
Java split()用法,使用特殊字符要使用转义字符。特殊字符有 * ^ : | . \1、单个符号作为分隔符特殊符号*.split("\\*");特殊符号^.split("\\^");特殊符号:.split("\\:");特殊符号|.split("\\|");特殊符号..split("\\.");特殊符号\.split("\\");...原创 2020-05-06 13:52:51 · 4998 阅读 · 0 评论