进阶day06-Lock接口的使用解决线程安全问题
This commit is contained in:
20
javaSE-day06/src/com/inmind/lock07/Demo07.java
Normal file
20
javaSE-day06/src/com/inmind/lock07/Demo07.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package com.inmind.lock07;
|
||||
|
||||
/*
|
||||
Lock接口更加灵活地解决线程安全问题
|
||||
Lock接口的常用实现类 ReentrantLock
|
||||
常用方法:
|
||||
lock():获得锁
|
||||
unlock():释放锁
|
||||
*/
|
||||
public class Demo07 {
|
||||
public static void main(String[] args) {
|
||||
//创建3个窗口来执行同一个任务
|
||||
TicketTask ticketTask = new TicketTask();
|
||||
|
||||
new Thread(ticketTask,"窗口1").start();
|
||||
new Thread(ticketTask,"窗口2").start();
|
||||
new Thread(ticketTask,"窗口3").start();
|
||||
|
||||
}
|
||||
}
|
||||
31
javaSE-day06/src/com/inmind/lock07/TicketTask.java
Normal file
31
javaSE-day06/src/com/inmind/lock07/TicketTask.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package com.inmind.lock07;
|
||||
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
public class TicketTask implements Runnable{
|
||||
//定义100张票电影票
|
||||
int tickeCount = 100;
|
||||
Lock lock = new ReentrantLock();//多态
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
//有票就卖
|
||||
while (true) {
|
||||
lock.lock();//让线程获取锁对象
|
||||
if (tickeCount > 0) {
|
||||
try {
|
||||
Thread.sleep(50);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println(Thread.currentThread().getName() + "正在卖第" + tickeCount + "张电影票");
|
||||
tickeCount--;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
//将锁对象释放,让多个线程重新争抢
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.inmind.syncnized_method06;
|
||||
package com.inmind.syncnized06;
|
||||
|
||||
/*
|
||||
synchronized能够修饰代码块和方法,修饰代码块之后就被称之为同步代码块,修饰方法之后就被称之为同步方法
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.inmind.syncnized_method06;
|
||||
package com.inmind.syncnized06;
|
||||
|
||||
public class TicketTask implements Runnable{
|
||||
//定义100张票电影票
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.inmind.syncnized05;
|
||||
package com.inmind.syncnized_method05;
|
||||
|
||||
/*
|
||||
在java中可以使用一个关键字synchronized来解决线程安全问题.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.inmind.syncnized05;
|
||||
package com.inmind.syncnized_method05;
|
||||
|
||||
public class TicketTask implements Runnable{
|
||||
//定义100张票电影票
|
||||
Reference in New Issue
Block a user