林青霞

005多线程Thread

旧巷老猫 提交于 2020-01-14 21:58:07
多线程Thread 多进程概述 进程 多线程 线程调度 线程调度概述 线程优先级 设置对象优先级 线程控制:其他方法 线程睡眠sleep 线程加入 join(): 线程礼让,暂停当前线程,执行其他线程 后台线程 中断线程 线程的生命周期 实现多线程 1.继承Thread类 线程名称 获取线程名称 设置线程名称:2种 2.实现Runnable接口(常用) 概述 实现 线程安全问题 实现卖电影票案例(不安全) 方式1:继承Thread类 方式2:实现Runnable接口 问题分析:同票和负数票 同步(synchronized) 同步概述 同步方法 同步代码块 买票同步代码块 同步方法 买票同步方法 方法1 方法2 方法3:静态方法锁 银行存钱案例 Lock锁(JDK5之后) Lock锁卖票案例 线程死锁 死锁问题及其代码 死锁案例 方法1 方法2: 线程间通信 线程间通信概述 等待/唤醒机制 生产消费:加入等待唤醒机制,加入判断** 方法1(更好): 方法2: 优化生产消费问题 多生产者,多消费者的问题。烤鸭生产一只消费一只 Condition等待/唤醒机制 优化生产消费问题 线程组ThreadGroup 概述 获取线程组,名字 修改线程组 线程池 概述 Callable接口:创建线程3 1.求和案例 匿名内部类方式使用多线程 定时器 循环一次 循环调用 案例

JavaScript Array对象基本方法

二次信任 提交于 2019-11-29 04:04:29
昨天出去前端面试又失败,期间问了个有关于数组对象的问题,下面就这类问题总结下JavaScript常用的数组操作方法。 一、何为数组(Array)对象 数组对象是使用单独的变量名来存储一系列的值。 二、创建数组的三种方式 2.1使用关键词 new 来创建数组对象。 let myStar =new Array(); myStar[0]="刘德华"; myStar[1]="成龙"; myStar[2]="林青霞"; myStar[3]="王菲"; console.log(myStar); 2.2 基于2.1的简洁写法 let myStar1=new Array("刘德华","成龙","林青霞","王菲"); console.log(myStar1[2]);//访问数组,Arry[索引值] 2.3对象字面量创建数组对象 let myStar2=["刘德华","成龙","林青霞","王菲"]; console.log(myStar2); 注:数组中数值可以是不同类型组成,它们可以是string类型,Boolean类型,number类型、空数组,甚至是函数对象。 三、数组对象的基本方法 3.1 concat() concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,仅会返回被连接数组的一个结果。 var arry1=[1,2,3]; var arry2=[1]; var

javaAPI_多线程_多线程基础3

一笑奈何 提交于 2019-11-28 07:23:39
1.JDK5以后Lock锁的概述和使用 (1).概述 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 (2).相关方法 Lock: void lock(): 获取锁。 void unlock():释放锁。 由于lock是一个接口,所以我们需要用实现类来创建对象,ReentrantLock是Lock的实现类 (3).代码实现 //线程类 public class SellTicket implements Runnable { // 定义票 private int tickets = 100; // 定义锁对象 private Lock lock = new ReentrantLock(); @Override public void run() { while (true) { try { // 加锁 lock.lock(); if (tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出售第"