教学网站开发应用方案,湖州网站制作报价,定制棺材网站,wordpress不填标题无法发布悲观锁、乐观锁
悲观锁#xff1a;一上来就加锁#xff0c;没有安全感#xff0c;每次只能一个线程进入访问完毕后#xff0c;再解锁。线程安全#xff0c;性能较差。
乐观锁#xff1a;一开始不上锁#xff0c;认为是没有问题的#xff0c;等要出现线程安全问题的时…悲观锁、乐观锁
悲观锁一上来就加锁没有安全感每次只能一个线程进入访问完毕后再解锁。线程安全性能较差。
乐观锁一开始不上锁认为是没有问题的等要出现线程安全问题的时候才开始控制。线程安全性能较好 练习
需求
有100份礼品小明、小红同时发送当剩下的礼品小于10的时候则不再送出利用多线程模拟该过程并将线程的名称打印出来并最后在控制台分别打印小红、小明各种送出多少份礼品
Test类
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Test {public static void main(String[] args) throws Exception {// 目标有100份礼品小明、小红同时发送当剩下的礼品小于10的时候则不再送出// 利用多线程模拟该过程并将线程的名称打印出来并最后在控制台分别打印小红、小明各种送出多少份礼品// 拿100分礼品到程序中来ListString gift new ArrayList();String[] names {口红,包包,鲜花,剃须刀,皮带,手表};Random r new Random();for (int i 0; i 100; i) {gift.add(names[r.nextInt(names.length)] (i1));}System.out.println(gift);//定义线程类创建线程对象去集合中拿礼物给别人SendThread xm new SendThread(gift,小明);xm.start();SendThread xh new SendThread(gift,小红);xh.start();xm.join();xh.join();System.out.println(xm.getCount());System.out.println(xh.getCount());}
}
SendThread类
import java.util.List;
import java.util.Random;public class SendThread extends Thread{private ListString gift;private int count;public SendThread(ListString gift, String name) {super(name);this.gift gift;}Overridepublic void run() {String name Thread.currentThread().getName();// 小明、小红发礼物出去// 实现线程安全问题// 注意1锁必须唯一Random r new Random();while (true){synchronized (gift){if (gift.size() 10){break;}String rs gift.remove(r.nextInt(gift.size()));System.out.println(name 发出了 rs);count;}}}public int getCount() {return count;}public void setCount(int count){this.count count;}
}