原 自学JVAVA---(64)--(内功心法【62】)三大案例再升级

三大案例再升级
【小城贝尔】
三大案例再升级,模拟影院票信息。
一个影院多人座,好似关系一对多。
时长多用块中锁,买票操作多端落。
现在挑战方法锁,操作即往一种括。
及时线程来强转,抓住子类来平反。
容器并发J U C,数组书写上拷贝。
内部已有安全锁,线程万千易操作。

三大案例再升级,模拟影院票信息。
一个影院多人座,好似关系一对多。

class HappyCimema{
    List<Integer> cSeat;
    String cName;
    public HappyCimema(List<Integer> cSeat, String cName) {
        this.cSeat = cSeat;
        this.cName = cName;
    }
}
class Client implements  Runnable{
    private  HappyCimema hc;
    private List<Integer> seats;
    public Client(HappyCimema hc, List<Integer> seats) {
        this.hc = hc;
        this.seats = seats;
    }
    @Override
    public void run() {
        buyFilmTickets();
    }
    public boolean buyFilmTickets() {
        //双重检测
        if(hc.cSeat.size() == 0){
            System.out.println(Thread.currentThread().getName() + "不好意思 票买完啦。。。。。。 ");
            return false;
        }
        synchronized (hc) {
            //获得影院所有的座位
            List<Integer> cSeat = hc.cSeat;
            //拷贝一份影院座位操作
            List<Integer> copy = new ArrayList<>();
            copy.addAll(cSeat);
            //将选定的座位和影院已经有的座位比较
            copy.removeAll(seats);
            //入过影院的座位数减去操作后的数量 刚好等于我们选得座位则购票成功
            if (cSeat.size() - copy.size() == seats.size()) {
                this.hc.cSeat = copy;
                System.out.println(Thread.currentThread().getName() + "您已经购票 ====> " + this.seats + "还剩下座位===>" + this.hc.cSeat);
                return true;
            } else {
                System.out.println(Thread.currentThread().getName() + "您购票失败 你的选择是 :====> " + this.seats + "还剩下座位是:===>" + this.hc.cSeat);
                return false;
            }
        }
    }
}
class  TestHappyCimema{
    public static void main(String[] args) {
        List<Integer> cSeate = new ArrayList<>();
        cSeate.add(1);
        cSeate.add(2);
        cSeate.add(3);
        cSeate.add(4);
        cSeate.add(5);
        cSeate.add(6);
        cSeate.add(7);

        List<Integer> c1 = new ArrayList<>();
        c1.add(2);
        c1.add(3);
        List<Integer> c2 = new ArrayList<>();
        c2 .add(4);
        c2 .add(3);
        List<Integer> c3 = new ArrayList<>();
        c3.add(1);
        c3.add(5);
        c3.add(6);

        HappyCimema hc = new HappyCimema(cSeate,"HappyCimemaa");

        new Thread(new Client(hc,c1),"亚历山大").start();
        new Thread(new Client(hc,c2),"马相伯").start();
        new Thread(new Client(hc,c3),"图灵").start();

    }
}

> "C:\Program Files (x86)\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\intellij\IntelliJ IDEA 2019.1.2\lib\idea_rt.jar=53869:D:\intellij\IntelliJ IDEA 2019.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\out\production\untitled;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-tests.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-javadoc.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-sources.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-test-sources.jar" concurrently.ThreeDemoPluse.TestHappyCimema
亚历山大您已经购票 ====> [2, 3]还剩下座位===>[1, 4, 5, 6, 7]
图灵您已经购票 ====> [1, 5, 6]还剩下座位===>[4, 7]
马相伯您购票失败 你的选择是 :====> [4, 3]还剩下座位是:===>[4, 7]

Process finished with exit code 0

时长多用块中锁,买票操作多端落。
现在挑战方法锁,操作即往一种括。
及时线程来强转,抓住子类来平反。

/***************************使用方法锁***************************/
class Web12306 implements Runnable{
    int tickets = 100;
    @Override
    public void run() {
        sellTickets();
    }
    private synchronized void sellTickets() {
        Passager p = (Passager) Thread.currentThread();
        //获得用户想购买的票数
        int num = p.tickes;
        int bougt = 0;
        while (num > 0) {
            if (tickets <= 0) {
                System.out.println(Thread.currentThread().getName() + "票没了");
                return;
            }
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "你已成功购票   "+(++bougt) + "   还剩下 ====》 "+(--tickets));
            num--;
        }
    }
}

class Passager extends  Thread{
    int tickes;
    String pName;
    public Passager(Runnable target , int tickes, String pName) {
        super(target,pName);
        this.tickes = tickes;
    }
}
class  TestWeb12306{
    public static void main(String[] args) {
        Web12306 we = new Web12306();

        Passager p = new Passager(we,8,"支付宝");
        Passager p1 = new Passager(we,10,"美团");
        Passager p2 = new Passager(we,3,"微信");
        p.start();
        p1.start();
        p2.start();
        Passager p3 = new Passager(we,10,"平多多");
        Passager p4 = new Passager(we,9,"京东");
        p3.start();
        p4.start();

    }
}

> "C:\Program Files (x86)\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\intellij\IntelliJ IDEA 2019.1.2\lib\idea_rt.jar=53853:D:\intellij\IntelliJ IDEA 2019.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\out\production\untitled;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-tests.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-javadoc.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-sources.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-test-sources.jar" concurrently.ThreeDemoPluse.TestWeb12306
支付宝你已成功购票   1   还剩下 ====》 99
支付宝你已成功购票   2   还剩下 ====》 98
支付宝你已成功购票   3   还剩下 ====》 97
支付宝你已成功购票   4   还剩下 ====》 96
支付宝你已成功购票   5   还剩下 ====》 95
支付宝你已成功购票   6   还剩下 ====》 94
支付宝你已成功购票   7   还剩下 ====》 93
支付宝你已成功购票   8   还剩下 ====》 92
平多多你已成功购票   1   还剩下 ====》 91
平多多你已成功购票   2   还剩下 ====》 90
平多多你已成功购票   3   还剩下 ====》 89
平多多你已成功购票   4   还剩下 ====》 88
平多多你已成功购票   5   还剩下 ====》 87
平多多你已成功购票   6   还剩下 ====》 86
平多多你已成功购票   7   还剩下 ====》 85
平多多你已成功购票   8   还剩下 ====》 84
平多多你已成功购票   9   还剩下 ====》 83
平多多你已成功购票   10   还剩下 ====》 82
美团你已成功购票   1   还剩下 ====》 81
美团你已成功购票   2   还剩下 ====》 80
美团你已成功购票   3   还剩下 ====》 79
美团你已成功购票   4   还剩下 ====》 78
美团你已成功购票   5   还剩下 ====》 77
美团你已成功购票   6   还剩下 ====》 76
美团你已成功购票   7   还剩下 ====》 75
美团你已成功购票   8   还剩下 ====》 74
美团你已成功购票   9   还剩下 ====》 73
美团你已成功购票   10   还剩下 ====》 72
京东你已成功购票   1   还剩下 ====》 71
京东你已成功购票   2   还剩下 ====》 70
京东你已成功购票   3   还剩下 ====》 69
京东你已成功购票   4   还剩下 ====》 68
京东你已成功购票   5   还剩下 ====》 67
京东你已成功购票   6   还剩下 ====》 66
京东你已成功购票   7   还剩下 ====》 65
京东你已成功购票   8   还剩下 ====》 64
京东你已成功购票   9   还剩下 ====》 63
微信你已成功购票   1   还剩下 ====》 62
微信你已成功购票   2   还剩下 ====》 61
微信你已成功购票   3   还剩下 ====》 60

Process finished with exit code 0

容器并发J U C,数组书写上拷贝。
内部已有安全锁,线程万千易操作。

/**********************************************************/
class CopyOnWriteArray{
    public static void main(String[] args) {
        //是线程安全的
        java.util.concurrent.CopyOnWriteArrayList<Integer> cowal = new java.util.concurrent.CopyOnWriteArrayList<Integer>();
        cowal.add(1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用InputStream和OutputStream类来读写二进制文件。InputStream用于读取二进制数据,而OutputStream用于写入二进制数据。下面是一个简单的示例代码,展示了如何使用InputStream和OutputStream读写二进制文件: ```java import java.io.*; public class BinaryFileReadWrite { public static void main(String[] args) { String filePath = "example.bin"; try { // 创建二进制文件并写入数据 OutputStream outputStream = new FileOutputStream(filePath); byte[] data = {1, 2, 3, 4, 5}; outputStream.write(data); outputStream.close(); // 读取二进制文件 InputStream inputStream = new FileInputStream(filePath); byte[] buffer = new byte[1024]; int bytesRead = inputStream.read(buffer); while (bytesRead != -1) { // 处理读取到的数据 for (int i = 0; i < bytesRead; i++) { System.out.print(buffer[i] + " "); } bytesRead = inputStream.read(buffer); } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们首先使用OutputStream来创建一个名为"example.bin"的二进制文件,并写入一些数据。然后,我们使用InputStream来读取该文件中的数据,并将其打印到控制台上。注意,我们使用了一个字节数组作为缓冲区,每次读取最多1024个字节,并且在读取完整个文件之后,需要关闭InputStream对象。 当然,这只是一个简单的示例,实际的二进制文件读写可能涉及到更复杂的数据结构和算法,需要根据具体情况进行设计和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值