自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 计算机网络--TCP/UDP

计算机网络

2020-03-08 15:18:15 159

原创 JAVA多线程(十)--线程安全的集合-ConcurrentHashMap

在说之前,可以先来看一下ConcurrentHashMap的效率,代码如下:class PutThread extends Thread{ private Map<String, Integer> map; private CountDownLatch countDownLatch; private String key = this.getId() + ""...

2020-03-01 22:10:13 165

原创 JAVA多线程(九)--阻塞队列

**1.**像priorityQueue、LinkedList 都是非阻塞队列,阻塞队列是指:对于一个有界队列,当队列为null,从队列中获取元素它会被阻塞当队列为满时,往队列中添加元素它也会被阻塞。阻塞队列会使得当前使用该队列的线程阻塞。2.JAVA中常用的几种阻塞队列1)ArrayBlockingQueue - 基于数组实现的阻塞队列2)LinkedBlockingQueue - 基于链...

2020-03-01 21:46:15 165

原创 JAVA多线程(八)--死锁-哲学家吃面问题

1.哲学家吃面问题:也就是说,有五个哲学家围成一圈,然后桌子上有五根筷子,每个人旁边都有一根筷子。这里就引出来了一个死锁问题,每个人都拥有其他人所需要的资源,但同时又等待其他人所拥有的资源,并且每个人在获得所有资源之前都不会放弃自己所拥有的资源。2.常见的死锁问题:1) 交叉锁导致的程序出现死锁,看一个例子public class TestDemo2 { //交叉锁导致的程序出现死锁...

2020-03-01 20:32:36 494

原创 JAVA多线程(七)--线程通信

1. Java线程通信最常见的两种方式:1)synchronized加锁的线程调用Object类的wait()/notify()/notifyAll()2)ReentrantLock类加锁的线程调用Condition类的await()/signal()/signalAll()2.先来看第一种方式。wait()/notify()/notifyAll()1) wait()/notify()/...

2020-03-01 19:41:29 132

原创 JAVA多线程(六)--线程同步-ReentrantLock

1.ReentrantLock源码里的一些方法在源码中我们可以看到,ReentrantLock实现的是Lock接口,这个接口提供了一些无条件的、可轮询的、定时的、可中断的锁获取操作,下来我们简单介绍一下各个方法:lock(); 用来获取锁,如果锁已经被其他线程获取,进行等待;tryLock();用来获取锁,如果获取成功,则返回true,获取失败,则返回false;tryLock(long ...

2020-03-01 17:19:46 138

原创 JAVA多线程(五)--Lock-乐观锁和悲观锁

1.悲观锁:假设最坏的情况,每次去拿数据都会认为别的线程会去修改,所以每次拿数据之前先上锁,这样别的线程想拿这个数据就会阻塞直到拿到锁。synchronized的实现是一个悲观锁。悲观锁存在的问题:1)多线程竞争下,加锁、解锁都会导致线程上下文切换和cpu调度延迟,性能问题存在2)一个线程持有锁会导致其他需要此锁的线程阻塞3)如果一个优先级高的线程等待优先级低的线程释放锁会导致优先级导致...

2020-02-29 21:41:50 530

原创 JAVA多线程(四)--线程同步-Volatile

1.cpu cache模型cpu - 计算机的主内存(RAM), cpu速度变快,主内存没有跟上cpu的步伐,最终导致 cpu的处理速度和主内存的访问速度差距越来越大。而cpu cache的出现解决了以上问题,同时引入了缓存不一致的问题。比如:i++1)首先读取内存到cpu cache2)进行i+13)将结果刷新到主内存中在单线程中这个例子不会出现任何问题,但是在多线程的情况下就会...

2020-02-29 21:02:03 112

原创 JAVA多线程(三)-- 线程同步-synchronized

线程同步之synchronized/ReentrantLock线程同步机制1、什么叫做线程同步?线程有自己的私有数据,比如栈和寄存器,当多个线程同时读写同一份共享资源的时候,会引起冲突,这时候需要引入线程同步机制使得各个线程排队一个一个对共享资源进行访问,而不是同时进行。2、概念:1)同步:当对个线程同时访问一块资源,这些线程间就需要同步2)临界资源:同一时刻只允许一个线程访问的资源...

2020-02-23 22:41:37 113

原创 JAVA多线程(二)-- 并发编程

java并发编程1.什么是并发编程?并发编程是指为了提高程序的执行速度,在宏观上使得多个任务(线程)同时执行。2.并发编程中启动的线程越多并不是效果一定越好。3.开发正确的高并发程序,需要注意的是:1)程序的死锁:多个线程为了抢占某一资源造成的一种僵局状态例:thread a lock1 -> get lock2thread b lock2 -> get...

2020-02-23 21:25:36 126

原创 JAVA多线程(一)-- 基础

一.进程和线程1.进程:进程是操作系统结构的基础,指一段正在执行的程序;是表示资源分配的基本单位,又是调度运行的基本单位,进程是系统中并发执行的单位。2.线程:一个程序可以同时执行多个任务,每一个任务又称之为一个线程,线程又称为轻量级的进程,线程是程序执行的最小单元,线程是实现并发功能的基本单位。我们来看一个例子:比如QQ在运行时有好多的子任务在同时运行,比如传文件,聊天啥的,这里的这些子任...

2020-02-20 22:21:25 91

原创 JAVA中HashMap

集合框架

2019-11-25 19:05:02 149

原创 JAVA链表

链表与数组的区别:两者区别:(1)数组静态分配内存,链表动态分配内存。(2)数组在内存中是连续的,链表是不连续的。(3)数组利用下标定位,查找的时间复杂度是O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。(4)数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。数组的优点:(1)随机访问性比较强,可以通过下标进行...

2019-10-19 17:08:00 129

原创 JAVA 递归

递归的思想:将大规模的问题变成小规模的问题,问题不变,规模变小递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。   循环:你打开面前这扇门,看到屋里面...

2019-10-15 15:53:48 3164

原创 JAVA 类加载

一:类加载类加载通常需要三个步骤:将class文件加载到内存中,并建立class对象是类加载的最终状态。1.加载:由类加载器进行加载,jvm提供类加载器,也可以通过继承classLoader实现自定义的类加载器。2.连接:生成对应的class对象后就进入连接状态把类的二进制数据加载到jre中。(1)验证:当前字节码文件是否符合虚拟机要求(魔数(用来标记字节码文件的类型),版本号…);(...

2019-10-05 14:18:57 81

原创 JAVA中MyArrayList、MyStack、MyQueueTest的实现

实现时都需要一个容器去存放数据,就使用数组去存放。MyArrayListArrayList实现ArrayList和数组有什么不同?1)ArrayList是可以动态调整大小 数组一旦定义就不可以改变大小2)提供了很多操作方法class EmptyArrayListException extends Exception{ public EmptyArrayListExcepti...

2019-10-05 12:43:57 377

原创 JAVA 多态

**JAVA多态**多态实现的必要条件:1.继承2.重写3.向上造型(父类引用派生类对象)继承:基本语法: class 类名 extends 父类名 { }如果没有指定的父类,那么 java 编译器默认 Object 就是该类的父类。*(1) extends(扩展)父类/超类/基类 子类/派生类继承不仅...

2019-09-29 15:31:39 107

原创 JAVA 类和对象

面向对象与面向过程面向对象:想完成一个功能,不管你的过程是如何实现的,不关心你的步骤,只要找到一个可以实现的人就行。面向过程:想完成一个功能,但是每一个过程必须你要亲力亲为,所有的细节问题自己来做。定义常量:private final static int INIT(大写)=10;类和对象:1.类和对象的概念 new:功能 (1).堆上开内存 (2).调用构造方法初始化实例变量...

2019-06-30 13:41:53 107

原创 JAVA基础

1.顺时针打印矩阵例如 1, 2, 3,45, 6,7, 89,10,11,1213,14,15,16打印出1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10public class TestDemo { /** * 顺时针打印矩阵: */ public static void main(String[] args) {...

2019-06-30 13:21:36 72

原创 JAVA 二维数组

用“##”替换一个“ ”(空格)public class TestDemo { public static int getCount(char[] ch){ int count=0; for(int i=0;i<ch.length;i++){ if(ch[i]==' '){ count++; ...

2019-06-04 16:23:38 182 1

原创 JAVA基础

简单的登陆注册功能实现: public class TestDemo { public static boolean login(int[] arr){ System.out.println("请输入账号:"); Scanner scann...

2019-06-02 22:22:53 75

原创 JAVA 一维数组题

给有序数组中添加元素并使其排序:public class TestDemo { public static int[] insertValue(int[] arr,int value){ int srcLen=arr.length ;//原始数组长度 arr=Arrays.copyOf(arr,arr.length+1); for(int i...

2019-06-02 22:17:13 244

原创 JAVA 一维数组

一维数组一维数组: 100个整型2个整型1.相同数据类型的集合2.一块连续内存100 * 4 =400字节一:一维数组的定义:1)int [ ] arr = {1,2,3}; [1] [2] [3] //32)int[ ] arr = new int[ ]{1,2,3};3)int[...

2019-06-02 21:55:51 115

原创 JAVA基础

输入三个正整数,输出最大值:package com.tulun.src1;import java.util.Scanner;public class TestDemo { public static void main(String[] args){ System.out.println("请输入三个正整数:"); Scanner scanner = ...

2019-05-20 12:10:34 65

原创 JAVA基础

第一篇,初来乍到,多多指教会记录我的一些JAVA课程笔记,作业等。笔记:运算符:算术运算符:% ++ – 单独使用:a=a+1不单独:后置++ 先取值,再赋值,后+1前置++ 先取值,再+1,后赋值例:package com.tulun.src1;import java.util.Scanner;public c...

2019-05-20 11:47:03 88

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除