Skip to content

Commit 15dadc9

Browse files
authored
Create README.md
1 parent 6b80f9c commit 15dadc9

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

README.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# JavaSample
2+
[![MIT](https://img.shields.io/badge/license-MIT-5eba00.svg)](https://github.com/GokuMohandas/practicalAI/blob/master/LICENSE)
3+
[![HitCount](http://hits.dwyl.com/Robinwho/JavaSample.svg)](http://hits.dwyl.com/Robinwho/JavaSample)
4+
[![Build Status](https://travis-ci.org/Wechat-Group/WxJava.svg?branch=develop)](https://travis-ci.org/Wechat-Group/WxJava)
5+
6+
# 简介
7+
- 🔥 New:此项目将Java常用设计模式、数据结构、分布式、算法、JVM、缓存技术等核心基础针对性做了实现。并均可直接运行。
8+
9+
# 使用说明
10+
11+
- git或下载项目:
12+
>$ git clone https://github.com/Robinwho/JavaSample.git
13+
14+
本地打开运行即可。
15+
16+
# 模块列表
17+
## 分布式
18+
### LRU1
19+
- 用java自己实现一个LRU。
20+
21+
### LRUCache
22+
- 通过 HashMap 实现一个缓存类 LRUCache ,我们通过逻辑处理,对最少使用的数据进行删除。
23+
24+
### LRUNode
25+
- 保证基本的Cache容量,如果超过容量则必须丢掉最不常用的缓存数据,再添加最新的缓存。每次读取缓存都会改变缓存的使用时间,将
26+
缓存的存在时间重新刷新。通过双向链表的数据结构实现 LRU Cache,链表头(head)保存最新获取和存储的数据值,链表尾(tail)
27+
既为最不常使用的值,当需要清理时,清理链表的 tail 即可,并将前一个元素设置为tail。
28+
29+
## 设计模式
30+
### BeanFactory
31+
- 懒汉式的变种,spring IOC容器就是使用的这种注册式的单例模式
32+
33+
### Hungry
34+
- 单例模式:饿汉式。在类加载时,就创建单例对象,执行效率高,但是占空间,以空间换时间,线程安全。
35+
36+
### Lazy1
37+
- 单例模式:懒汉式。双重判断,对象使用的时候,才去创建。有线程安全的风险,需要加锁。
38+
39+
### Lazy2
40+
- 单例模式:懒汉式。静态内部类,在使用时,才加载。此种模式,既是懒加载,又没有加锁影响性能。
41+
42+
## 线程模型
43+
>用三个线程按顺序循环打印abc三个字母,比如abcabcabc。
44+
使用同步块和wait、notify的方法控制三个线程的执行次序。具体方法如下:从大的方向上来讲,该问题为三线程间的同步唤醒操作,
45+
主要的目的就是ThreadA->ThreadB->ThreadC->ThreadA循环执行三个线程。为了控制线程执行的顺序,那么就必须要确定唤醒、等待的顺序,
46+
所以每一个线程必须同时持有两个对象锁,才能进行打印操作。一个对象锁是prev,就是前一个线程所对应的对象锁,其主要作用是保证当前
47+
线程一定是在前一个线程操作完成后(即前一个线程释放了其对应的对象锁)才开始执行。还有一个锁就是自身对象锁。主要的思想就是,为
48+
了控制执行的顺序,必须要先持有prev锁(也就前一个线程要释放其自身对象锁),然后当前线程再申请自己对象锁,两者兼备时打印。之后
49+
首先调用self.notify()唤醒下一个等待线程(注意notify不会立即释放对象锁,只有等到同步块代码执行完毕后才会释放),再调用
50+
prev.wait()立即释放prev对象锁,当前线程进入休眠,等待其他线程的notify操作再次唤醒。
51+
52+
### ABC_Synch
53+
- synchronized 搭配wait/notify实现。
54+
55+
### ConcurrentSingleLinedList
56+
- 并发安全的链表。在链表实现的基础上加锁,所有设计到链表结构变化的地点加锁,例如,新增,删除等操作。例如:借助ReentrantLock()
57+
可重入锁对新增结点加锁,避免冲突。
58+
59+
### SyncThreadTest
60+
- 信号量Sephmore。开启多个线程,如果保证顺序执行,有哪几种实现方式,或者如何保证多个线程都执行完再拿到结果。
61+
62+
### SyncThreadTestReentrantLock
63+
- 使用ReentrantLock可重入锁。
64+
65+
### ThreadPrintType2
66+
- lock锁方式
67+
68+
# 联系
69+
- 🔥🔥🔥🔥🔥🔥🔥🔥 因工作繁忙,更新有延迟。公众号【未名小猪】更方便
70+
- 🔥🔥🔥🔥🔥🔥🔥🔥 欢迎大家关注留言,工作生活随想,与大家交流
71+
72+
![](https://github.com/Robinwho/Deep-Learning/blob/master/pkupig.jpg)

0 commit comments

Comments
 (0)