執行緒在作業中的應用
由于我們作業寫的代碼要求解耦,所以我們的類還是我們平時寫的類,只是我們需要一個執行緒類去操作我們平時寫的類
請看該文章的最后一部分Callable進階實作(點我)
synchronized和lock區別
? 參考(點我)
使用synchronized實作
- 首先我們寫一個我們平時寫的類(SaleTicket)
- 我們寫一個測驗類
- 我們通過lambda運算式簡寫我們執行緒類
package com.yang.kuangTeacher;
/**
* @author: fudy
* @date: 2020/9/13 下午 03:49
* @Decription: 實際作業運用執行緒
**/
public class TrueThread {
public static void main(String[] args) {
SaleTicket saleTicket = new SaleTicket();
new Thread(()->{
for (int i = 0; i < 40; i++) {
saleTicket.sale();
}
},"黃牛:").start();
new Thread(()->{
for (int i = 0; i < 40; i++) {
saleTicket.sale();
}
},"12306:").start();
new Thread(()->{
for (int i = 0; i < 40; i++) {
saleTicket.sale();
}
},"柜臺:").start();
}
}
class SaleTicket{
private int ticket = 30;
public synchronized void sale(){
if (ticket>0){
System.out.println(Thread.currentThread().getName()+"賣出了第"+(ticket--)+"票");
}
}
}
這里的實作和我的另一篇博客中講的實作Callable介面實作多執行緒中的進階使用類似,這些都是作業中使用多執行緒的思想,
作業中的多執行緒(點我)
使用Lock鎖實作
package com.yang.kuangTeacher;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author: fudy
* @date: 2020/9/13 下午 03:49
* @Decription: 實際作業運用執行緒
**/
public class TrueThread2 {
public static void main(String[] args) {
SaleTicket saleTicket = new SaleTicket();
new Thread(()->{
for (int i = 0; i < 40; i++) {
saleTicket.sale();
}
},"黃牛:").start();
new Thread(()->{
for (int i = 0; i < 40; i++) {
saleTicket.sale();
}
},"12306:").start();
new Thread(()->{
for (int i = 0; i < 40; i++) {
saleTicket.sale();
}
},"柜臺:").start();
}
}
class SaleTicket2{
private int ticket = 30;
// 用可重入鎖這個實作類
Lock lock = new ReentrantLock();
public void sale(){
try {
// 加鎖
lock.lock();
if (ticket>0){
System.out.println(Thread.currentThread().getName()+"賣出了第"+(ticket--)+"票");
}
}finally {
// 釋放鎖
lock.unlock();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/54131.html
標籤:其他
上一篇:sourcetree沒有圖示
下一篇:急急急,求大神解答。
