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