• 多线程


    课堂笔记:

    多线程
    如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称为多线程
    多个线程交替占用CPU资源,而非真正的并行执行
    优点:充分利用CPU的资源、简化编程模型、带来良好的用户体验

    主线程:
    Thread类
    java提供了java。lang。Thread类支持多线程编程
    主线程
    main()方法即为主线程入口
    产生其他子线程的线程
    必须最后完成执行,因为它执行各种关闭动作

    面试题:
    java中创建线程的两种方式
    继承java.lang.Thread类
    实现java.lang.Runnable接口

    面试题:
    Hashtable &&HashMap
    Hhashtable
    线程安全,效率较低
    键和值都不允许为null
    HashMap
    非线程安全,效率较高
    键和值都允许为null

    1、爬山:

    package com.zuoye;
    
    public class PaShan extends Thread {
        private int time;
        private int high;
        
        public PaShan(int time, String name,int high) {
            super(name);
            this.time = time;
            this.high = high*1000/100;
        }
        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            while(high>0) {
                try {
                    Thread.sleep(this.time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(name+"爬完100米");
                high--;
            }
            System.out.println(name+"爬到山顶***********");
        }
    }
    package com.zuoye;
    
    public class Test1 {
    
        public static void main(String[] args) {
            PaShan old = new PaShan(1000,"老年人",1);
            PaShan young = new PaShan(600,"年轻人",1);
            old.start();
            young.start();
        }
    }

     2、购票

    package com.zuoye;
    
    public class Buy implements Runnable {
    
        private int count = 10;
        private int num;
        @Override
        public void run() {
            // TODO Auto-generated method stub
            String name = Thread.currentThread().getName();
            while (true) {
                if(!qiang(name)) {
                    break;
                }
            }
        }
        public synchronized boolean qiang(String name) {
            if (count <= 0) {
                return false;
            }
            count--;
            num++;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(name + "抢到第" + num + "张票,剩余" + count + "张票");
            if (name.equals("黄牛党")) {
                return false;
            }
            return true;
        }
    }
    package com.zuoye;
    
    public class TestBuy {
    
        public static void main(String[] args) {
            Buy buy = new Buy();
            Thread huang = new Thread(buy,"黄牛党");
            Thread tao = new Thread(buy,"陶跑跑");
            Thread zhang = new Thread(buy,"张飘飘");
            huang.start();
            tao.start();
            zhang.start();
        }
    }

  • 相关阅读:
    python计算机基础
    计算机基础知识
    ftok函数
    可重入函数与不可重入函数
    Redis学习资料整理
    小记6月18
    libxml2简单的生成、解析操作
    切换日志是否更新检查点?
    第五课 数据备份恢复实验
    第四课 Grid Control实验 GC Agent安装(第一台机器部署) 及卸载
  • 原文地址:https://www.cnblogs.com/qq993411626------/p/10503153.html
Copyright © 2020-2023  润新知