
Java
cainiao_23333
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java InputStream.read()读取数据流字节,存储到缓冲区数组
定义public abstract int read()public int read(byte[] b)public int read(byte[] b,int off,int len)参数:b:存储读入数据的缓冲区;off:数组 b 中将写入数据的初始偏移量;len:要读取的最大字节数返回:读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。异常抛出:IOException: 如果不是因为流位于文件末尾而无法读取第一个字节;如果输入..原创 2020-10-08 17:50:07 · 8199 阅读 · 0 评论 -
[转载] JDK8 HashMap工作原理分析
【转载地址】jdk HashMap工作原理分析Map是一个映射键和值的对象。类似于Python中的字典。HashMap为什么会出现呢?因为数组这种数据结构,虽然遍历简单,但是插入和删除操作复杂,需要移动数组内部的元素;链表这种数据结构,插入和删除操作简单,但是查找复杂,只能一个一个地遍历。有没有一种新的数据结构,插入数据简单,同时查找也简单? 这个时候就出现了哈希表这种数据结构。 这是一种折中的方式,插入没链表快,查询没数组快。wiki上就是这么定义哈希表的:散列表(Hash tab转载 2020-09-09 14:27:30 · 187 阅读 · 0 评论 -
[转载] 浅谈Java中的hashcode方法
【原文地址】浅谈Java中的hashcode方法浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法: 1 publicnativeinthashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。 为何Object类需要这样一个方法?它有什么作用...转载 2020-09-09 11:02:03 · 115 阅读 · 0 评论 -
哲学家就餐问题
死锁:多个线程各自占有一些共享资源,并且相互等待其他线程占有的资源才能进行, 而导致两个或多个线程都在等待对方释放资源,都停止执行的情形。 某一个同步块同时拥有"两个以上的对象锁"时就会发生死锁现象。经典问题:哲学家就餐问题死锁是由于“同步块需要同时持有多个对象锁造成”的,要解决这个问题,思路很简单,就是:同一个代码块,不要同时持有两个对象锁。改进前,发生死锁的代码/** * liyang 2020-07-01 * 改进前发生死锁的代码...原创 2020-08-21 21:27:35 · 132 阅读 · 0 评论 -
Java中控制线程执行的4种方式
控制线程join线程Thread提供了让一个线程等待另一个线程完成的方法--join()方法,也就是一个线程中调用其他线程的join()方法时,调用线程被阻塞,直到join线程执行完毕后再次启动该调用线程。话不多说,看代码:package com.ly.thread;/** * liyang 2020-08-11 */public class JoinThread extends Thread { public JoinThread(String name) {原创 2020-08-11 18:20:44 · 1303 阅读 · 0 评论 -
线程的生命周期与状态切换
当线程被创建之后,它不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新生、就绪、运行、阻塞和死亡5种状态,由于对多线程的支持,线程的状态会不断地切换。具体说明一、新生状态(1种)使用关键字new一个线程进入新生状态二、进入就绪状态的4种情况创建新的线程,调用start()方法进入就绪状态 阻塞状态解除,进入就绪状态 调用yield方法,避免占用过多CPU,从而进入就绪状态(调用方法:Thread.yield(),说明:礼让一下,...原创 2020-08-11 14:38:39 · 446 阅读 · 0 评论 -
线程的并发协作:生产者消费者模式(管程法与信号灯法)
线程的并发协作协作:生产者消费者模式应用场景:生产者消费者问题1、假设仓库只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费2、如果仓库没有产品,则生产者将产品放入仓库,否则停止生产并等待,知道仓库中的产品被消费者取走为止3、如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止分析:这是一个线程同步问题,生产者消费者共享同一个资源,并且消费者生产者之间相互依赖,互为条件1、对于生产者,没有生产产品之前,要通知消费者等待;而生原创 2020-07-01 22:57:55 · 259 阅读 · 0 评论 -
使用synchronized的两种用法保证线程安全
synchronized方法和synchronized块/** * 线程不安全 * sleep()模拟网络延时,放大发生问题的可能性 * 这边出现的问题是出现多人抢一张票,并且出现票号为0和负数的情况 * 原因:1、票数为负数情况,当abc三个黄牛分别进入线程try模块,此时已经通过票数(1 <= 0 ?break :往下继续执行)的判断, * 等待执行,当a拿走1,b则拿走0,c则拿走-1,abc的拿票相对顺序不确定,但当前1 0 -1的情况会发生。 * *原创 2020-08-11 20:24:37 · 950 阅读 · 0 评论 -
Java中开启多线程的三种方法
Java开启多线程有三种方式:继承Thread类,重写run方法 实现Runnable接口,重写run方法 实现Callable接口,重写call方法(juc并发包中,用的不多)方式一:执行线程必须调用start()方法,从而加入到调度器中 不一定立即执行,系统安排调度分配执行(等待分配时间片) 直接调用run()方法不是开启线程,是普通方法调用/** * 创建多线程方法一: * 1、创建:继承Thread + 重写run()方法 * 2、启动:创建子类对象 + start()原创 2020-06-29 11:50:22 · 9458 阅读 · 0 评论