Java多线程-线程交替执行任务——公平锁
LockDemo.java
package com.thread.synchronizedDemo.lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author 007
* @ClassName 类名称
* @Description 类描述
*/
public class LockDemo implements Runnable {
// 定义一个数用来交替更改数字的正负号
private int j = 1;
// 定义公平锁,用来是线程1和线程2交替执行
ReentrantLock lock = new ReentrantLock(true);
@Override
public void run() {
for(int i = 1; i < 100; i++){
//获取锁
lock.lock();
try{
System.out.println(Thread.currentThread().getName()+" "+i*j);
j=-j;
}finally{
//释放锁
lock.unlock();
}
}
}
}
TestLock.java
package com.thread.synchronizedDemo.lock;
/**
* @author 007
* @ClassName 类名称
* @Description 类描述
*/
public class TestLock {
public static void main(String[] args) {
//创建对象
LockDemo lockDemo = new LockDemo();
//创建两个线程,启动两个线程
new Thread(lockDemo,"线程1").start();
new Thread(lockDemo,"线程2").start();
}
}
输出结果
线程1 1
线程2 -1
线程1 2
线程2 -2
线程1 3
线程2 -3
线程1 4
线程2 -4
线程1 5
线程2 -5
线程1 6
线程2 -6
线程1 7
线程2 -7
线程1 8
线程2 -8
线程1 9
线程2 -9
线程1 10
线程2 -10
线程1 11
........