自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 8162 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 488

原创 自己动手简单实现CountDownLatch

在使用线程池的过程中,如何判断所有提交的任务都已经执行完毕了呢?使用jdk自带的CountDownLatch,可以轻松实现这一需求public class CountdownLatchTest { private static final CountDownLatch countDownLatch = new CountDownLatch(5); public static void

2017-11-25 01:18:55 583

原创 多线程Future模式简单实现

在日常生活中,会经常遇到这样的例子,当某一件事情特别耗时,我们往往不会在原地等待,而是利用等待的时间去做其他事情。例如,需要定做一个生日蛋糕,我们只会去蛋糕店和师傅说一声,交完钱拿到票据,然后做自己的事情,过一段时间,拿着刚才的票据,就能拿到蛋糕了。多线程中也存在这样的模式,称之为future模式。现在,简单的实现这样的模式。首先定一个Future接口,这个接口只有一个get方法,用来获取结果。pu

2017-11-16 01:09:06 1187

原创 读写分离锁的简单实现

背景当多线程访问共享数据时,为保证线程安全,通常情况下会对共享数据加锁。最简单的方式在读或者写共享数据时加锁。但是这样会影响到效率。比如,多个线程只对数据做读操作而没有其他线程对其写操作时,读线程没有必要被阻塞,这时不存在线程安全问题。 总结一下 是否加锁 read write read F T write T T也就是说,当只有度线程时,才无需加锁。首先定义锁

2017-11-15 16:09:31 704

原创 使用观察者模式观察线程的生命周期

在线程运行的过程中,外界不能主动获取到其内部的运行状态,而一个线程可以天然的作为一个主题事件被观察者观察。因此可以用观察者模式实现这一目的。首先定义一个抽象类继承Runnable接口,用于构造运行线程和观察者的构造public abstract class ObservableRunnable implements Runnable { protected LifeCycleListener

2017-11-03 00:06:41 700 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 460

原创 多线程中的单例模式

单例模式大家一定不陌生饿汉式public class SingletonTest { private static SingletonTest instanse = new SingletonTest(); private SingletonTest() { } public static SingletonTest getInstanse() { re

2017-10-30 23:10:26 174

原创 自己动手,写一个简单的线程池(3)

接上篇 为了更好的利用资源,线程池需要动态调整线程数量。 首先,定义好最小线程,活跃线程,最大线程数量 private static int min; private static int active; private static int max;在线程池执行任务过程中,还需要有另一线程负责线程的新建和回收。因此简单让SimpleThreadPool继承Thread,覆

2017-10-30 19:51:17 244

原创 自己动手,写一个简单的线程池(2)

上一篇中简单实现了一个线程池,但是还有问题没有解决 1.没有任务加入策略。即可以无限多向任务队列中添加任务 2.没有关闭线程池 因此对其进行改造任务加入策略首先定义策略接口及异常@FunctionalInterfacepublic interface DiscardPolicy { void discard() throws DiscardException;}public cla

2017-10-30 16:17:13 249

原创 自己动手,写一个简单的线程池(1)

在很多场景下,创建线程并执行任务完,我们并不希望线程生命结束。因为重新创建线程的开销很大,如果能复用线程是最好不过得了。所以有了线程池就可以避免重复创建-销毁线程。 现在手写一个简单的线程池思路将执行的任务逻辑抽离,因此需要有一个任务队列初始化时创建一定数量的线程,用来执行任务队列中的任务当任务队列为空时,线程池中的线程等待唤醒,当有新任务加入时,唤醒线程按照上述思路,先开始实现首先定义好

2017-10-30 00:16:34 1285

原创 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 185

原创 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 197

原创 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 230

原创 java并发编程学习(2)

线程的生命周期和start方法线程的生命周期如下在new Thread()后,线程并没有真正启动,只有在调用start方法后,才会成为一个线程。但是线程并不会立即执行,它处于可执行状态,即runnable状态,等待cpu的调度。当被分配到cpu执行权,就到了running状态。在running的过程中,如果sleep或者等待锁,就会处于blocked状态。被block后,不能立即进入running状

2017-05-29 13:05:54 175

原创 java并发编程学习(1)

创建并启动线程

2017-05-28 13:48:02 188

空空如也

空空如也

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

TA关注的人

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