其实楼主搞混了两个概念,一个是线程创建的顺序和公平锁的概念搞混了,先说线程创建的顺序,我们现在用的都是多核机器,所以楼主的创建
线程的方法是无法保证线程创建顺序按照1 2,3,4,5,6来的,他是由cpu自己调度的,及时是单核机子,也会使用时间片轮转调度,所以楼主的创建
线程方法无法保证创建线程,第二个问题是公平锁的问题,当线程创建后才去请求锁,公平锁可以保证请求锁的顺序,在实际生产过程中创建顺序
没有太大的意义的,更多的是关注线程的执行顺序,线程执行顺序可以用join,countDownLatch,syclicBarrier,lockSupport ,阻塞等方法保证执行顺
Java多线程公平锁问题
5Java多线程中Reentrant类的带参构造器,创建一个公平锁,按道理说线程应该是先进先出的原则,为什么打印会是乱序。求解答:
package cn.zxyy.multiThread.chap4.ReentrantLock.Fair_noFair_test;
import java.util.concurrent.locks.ReentrantLock;
public class Service {
private ReentrantLock lock;
public Service(boolean isFair){
lock = new ReentrantLock(isFair);
}
public void serviceMethod(){
try{
lock.lock();
System.out.println("ThreadName = " +Thread.currentThread().getName()+"获得锁定");
}finally {
lock.unlock();
}
}
}
package cn.zxyy.multiThread.chap4.ReentrantLock.Fair_noFair_test;
public class RunFair {
public static void main(String[] args) {
final Service service = new Service(true);
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("♠线程"+Thread.currentThread().getName() +"运行了");
service.serviceMethod();
}
};
Thread[] threads = new Thread[10];
for (int i = 0; i < 10; i++) {
threads[i] = new Thread(runnable);
}
for (int i = 0; i < 10; i++) {
threads[i].start();
}
}
}
使用的是IntellijIdea2017会和这个工具的设置有关系吗?
- 点赞
- 写回答
- 关注问题
- 收藏
- 复制链接分享
- 邀请回答
5条回答
为你推荐
- Java多线程公平锁问题
- intellij-idea
- 5个回答
- Java AQS如何实现非公平锁
- java
- 3个回答