zoukankan      html  css  js  c++  java
  • 线程问题(更新中)

    1.线程之间状态的转换(偷了张图,哈哈)

    2.具体网址(写的很好很详细):https://blog.csdn.net/jiangwei0910410003/article/details/19962627

    3.我自己的想法:创建线程时,继承Thread和实现Runable接口,线程都是随机的,但是实现Runable可以实现同一资源的共享。

    package com.briup.chap10;
    
    public class SynchTest implements  Runnable{
        private Ticket ticket;
        //创建当前线程对象,一开始构建时就拥有买票功能
        public SynchTest(Ticket ticket){
            this.ticket=ticket;
        }
        public void run() {
            //如果票的数量大于0,可以调用sale进行卖票
            
            while(ticket.getNum()>0){
                synchronized (ticket) {
                    ticket.sale();
                    System.out.println(Thread.currentThread().getName()+"余票:"+ticket.getNum());
    //                try {
    //                    Thread.sleep(10);
    //                } catch (InterruptedException e) {
    //                    // TODO Auto-generated catch block
    //                    e.printStackTrace();
    //                }
                }
            }
        }
        public static void main(String[] args) {
            //一开始构建有100张票
            Ticket ticket=new Ticket(10);
            //每个窗口都是这100张票
            SynchTest st=new SynchTest(ticket);
            Thread t1=new Thread(st,"上海火车站");
            Thread t2=new Thread(st,"太原火车站");
            t1.start();
            t2.start();
        }
    }
    class Ticket{
        private int num;
        public Ticket(){}
        public Ticket(int num){
            this.num=num;
        }
        public int getNum() {
            return num;
        }
        public void setNum(int num) {
            this.num = num;
        }
        public void sale(){
            num--;
        }
    }

    运行结果:

    上海火车站余票:9
    上海火车站余票:8
    太原火车站余票:7
    上海火车站余票:6
    上海火车站余票:5
    上海火车站余票:4
    上海火车站余票:3
    上海火车站余票:2
    上海火车站余票:1
    上海火车站余票:0
    太原火车站余票:-1

    package com.briup.chap10;

    public class SynchTest2 extends Thread{
    private static int num=10;

    @Override
    public void run() {
    print();
    // synchronized (new Integer(num)) {}
    }

    public synchronized void print(){
    while(num>0){
    num--;
    System.out.println(getName()+" num:"+num);
    }
    }

    public static void main(String[] args) {
    SynchTest2 st=new SynchTest2();
    SynchTest2 st2=new SynchTest2();
    st.setName("first");
    st2.setName("second");
    st.start();
    st2.start();
    }
    }

    运行结果:

    second num:8
    second num:7
    second num:6
    second num:5
    second num:4
    first num:8
    first num:2
    first num:1
    first num:0
    second num:3

  • 相关阅读:
    selenium + python 环境配置 (三)之启动chrome
    selenium + python 环境配置 (二)之启动IE
    selenium + python 环境配置 (一)
    知源图四点坐标和目标图四点坐标,求透视变换矩阵
    memset()初始化为1的那些事
    NSOJ 4621 posters (离散化+线段树)
    申请到新博客了好开心
    SpringCloud之Hystrix-Dashboard监控,以及踩的坑...
    SpringBoot中在除Controller层 使用Validation的方式
    Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步
  • 原文地址:https://www.cnblogs.com/zhaomin08240115/p/9229937.html
Copyright © 2011-2022 走看看