- 博客(16)
- 收藏
- 关注
原创 kubernetes安装并启动mysql示例
安装kubernetes# systemctl disable firewalld# systemctl stop firewalld# yum -y install etcd kubernetes# vim /etc/sysconfig/dockerOPTIONS='--selinux-enabled=false --insecure-registry gcr.io'# vim /etc
2018-02-26 11:14:58
8201
1
原创 Worker Thread设计模式
Worker Thread模式的基本思路是,有一个流水线(channel),客户端不断的把任务(request)放到其中,当有任务时,工作线程(worker)就执行任务,否则等待任务。 下面对这个模式简单实现首先定义request类public class Request { private final String name; private final int number;
2017-11-26 23:59:44
512
原创 自己动手简单实现CountDownLatch
在使用线程池的过程中,如何判断所有提交的任务都已经执行完毕了呢?使用jdk自带的CountDownLatch,可以轻松实现这一需求public class CountdownLatchTest { private static final CountDownLatch countDownLatch = new CountDownLatch(5); public static void
2017-11-25 01:18:55
607
原创 多线程Future模式简单实现
在日常生活中,会经常遇到这样的例子,当某一件事情特别耗时,我们往往不会在原地等待,而是利用等待的时间去做其他事情。例如,需要定做一个生日蛋糕,我们只会去蛋糕店和师傅说一声,交完钱拿到票据,然后做自己的事情,过一段时间,拿着刚才的票据,就能拿到蛋糕了。多线程中也存在这样的模式,称之为future模式。现在,简单的实现这样的模式。首先定一个Future接口,这个接口只有一个get方法,用来获取结果。pu
2017-11-16 01:09:06
1193
原创 读写分离锁的简单实现
背景当多线程访问共享数据时,为保证线程安全,通常情况下会对共享数据加锁。最简单的方式在读或者写共享数据时加锁。但是这样会影响到效率。比如,多个线程只对数据做读操作而没有其他线程对其写操作时,读线程没有必要被阻塞,这时不存在线程安全问题。 总结一下 是否加锁 read write read F T write T T也就是说,当只有度线程时,才无需加锁。首先定义锁
2017-11-15 16:09:31
713
原创 使用观察者模式观察线程的生命周期
在线程运行的过程中,外界不能主动获取到其内部的运行状态,而一个线程可以天然的作为一个主题事件被观察者观察。因此可以用观察者模式实现这一目的。首先定义一个抽象类继承Runnable接口,用于构造运行线程和观察者的构造public abstract class ObservableRunnable implements Runnable { protected LifeCycleListener
2017-11-03 00:06:41
734
1
原创 观察者模式简单实现
简单来说观察者模式是指被观察对象在状态变化时,主动通知观察者下面是一个简单的实现public class Subject { private List<Observer> observers = new ArrayList<>(); private int state; public void setState(int state) { if (this.state
2017-11-02 00:58:39
480
原创 多线程中的单例模式
单例模式大家一定不陌生饿汉式public class SingletonTest { private static SingletonTest instanse = new SingletonTest(); private SingletonTest() { } public static SingletonTest getInstanse() { re
2017-10-30 23:10:26
184
原创 自己动手,写一个简单的线程池(3)
接上篇 为了更好的利用资源,线程池需要动态调整线程数量。 首先,定义好最小线程,活跃线程,最大线程数量 private static int min; private static int active; private static int max;在线程池执行任务过程中,还需要有另一线程负责线程的新建和回收。因此简单让SimpleThreadPool继承Thread,覆
2017-10-30 19:51:17
252
原创 自己动手,写一个简单的线程池(2)
上一篇中简单实现了一个线程池,但是还有问题没有解决 1.没有任务加入策略。即可以无限多向任务队列中添加任务 2.没有关闭线程池 因此对其进行改造任务加入策略首先定义策略接口及异常@FunctionalInterfacepublic interface DiscardPolicy { void discard() throws DiscardException;}public cla
2017-10-30 16:17:13
259
原创 自己动手,写一个简单的线程池(1)
在很多场景下,创建线程并执行任务完,我们并不希望线程生命结束。因为重新创建线程的开销很大,如果能复用线程是最好不过得了。所以有了线程池就可以避免重复创建-销毁线程。 现在手写一个简单的线程池思路将执行的任务逻辑抽离,因此需要有一个任务队列初始化时创建一定数量的线程,用来执行任务队列中的任务当任务队列为空时,线程池中的线程等待唤醒,当有新任务加入时,唤醒线程按照上述思路,先开始实现首先定义好
2017-10-30 00:16:34
1299
原创 sleep和wait的区别
sleep是Thread的方法,wait是Object的方法sleep不会释放锁,wait会释放锁sleep不需要依赖锁,而wait需要sleep不需要唤醒,但是wait需要用例子来解释3private static Object lock = new Object(); public static void m1(){ try { Thread
2017-10-27 23:50:01
202
原创 java并发编程学习(4)
构造Thread对象如下代码创建并打印Thread对象的名称public class CreateThread { public static void main(String[] args) { Thread t = new Thread(); Thread t1 = new Thread(); t.start(); t1.st
2017-10-24 23:52:46
220
原创 java并发编程学习(3)
多线程模拟银行排队银行排队叫号的场景如图所示:有一个出票机,按顺序出票。有多个柜台叫号。对于这样的场景,代码实现可以分为2部分,出票机和柜台。出票机public class TicketWindow implements Runnable { private int index = 1; private final int MAX = 50; @Override pub
2017-06-01 22:42:44
262
原创 java并发编程学习(2)
线程的生命周期和start方法线程的生命周期如下在new Thread()后,线程并没有真正启动,只有在调用start方法后,才会成为一个线程。但是线程并不会立即执行,它处于可执行状态,即runnable状态,等待cpu的调度。当被分配到cpu执行权,就到了running状态。在running的过程中,如果sleep或者等待锁,就会处于blocked状态。被block后,不能立即进入running状
2017-05-29 13:05:54
182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人