随笔分类 -  Java 多线程

摘要:一、什么是自旋锁? 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成 busy-waiting。 它是 阅读全文
posted @ 2018-10-08 18:03 灰色飘零 阅读(4814) 评论(0) 推荐(2) 编辑
摘要:一、悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是 阅读全文
posted @ 2018-10-08 17:43 灰色飘零 阅读(26102) 评论(0) 推荐(10) 编辑
摘要:一、 使用背景 谈到Java多线程,我们很自然的会想到并发,在编写多线程代码时,我们一般会创建多个线程,如果并发的线程数量很多,而且每个线程都是执行一个时间很短的任务就结束了,这样频繁的进行线程的创建会降低系统的效率,因为频繁创建和销毁线程是需要时间的。 那么有没有一种办法可以使得线程可以复用,就是 阅读全文
posted @ 2018-03-07 15:43 灰色飘零 阅读(645) 评论(0) 推荐(2) 编辑
摘要:问题背景 在感觉正常的使用ArrayList的迭代删除的操作的时候,发现了如下的崩溃日志: 产生上述崩溃的代码如下: 感觉上述代码是没问题的啊,单线程下我们这么写是没问题的,但是特殊的是此段代码位于一个静态方法里面。没有加同步语句,而且上面还有一个执行添加操作的静态方法,两个方法操作一个静态变量。 阅读全文
posted @ 2017-12-22 11:47 灰色飘零 阅读(482) 评论(0) 推荐(2) 编辑
摘要:Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别 1. sleep 和 wait 方法解释 sleep()方法是Thread类里面的,主要的意义就是让当前线程停止执行,让出cpu给 阅读全文
posted @ 2016-11-17 12:04 灰色飘零 阅读(39357) 评论(0) 推荐(4) 编辑
摘要:1. 线程间的通信机制 线程之间通信机制有两种: 共享内存、消息传递。 2. Java并发 Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式执行,通信的过程对于程序员来说是完全透明的。 3. 同步原语 有三个同步原语:Synchronized、volatile和final。 Syn 阅读全文
posted @ 2016-11-17 10:31 灰色飘零 阅读(1172) 评论(0) 推荐(3) 编辑
摘要:一、线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。 线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(block 阅读全文
posted @ 2016-11-15 18:43 灰色飘零 阅读(117653) 评论(1) 推荐(11) 编辑
摘要:一、start 和 run 方法解释: 1) start:用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开 阅读全文
posted @ 2016-11-15 18:09 灰色飘零 阅读(32391) 评论(2) 推荐(13) 编辑

点击右上角即可分享
微信分享提示