多线程

课堂笔记:

多线程
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称为多线程
多个线程交替占用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();
    }
}

原文地址:https://www.cnblogs.com/qq993411626------/p/10503153.html