ScheduledThreadPoolExecutor的使用

Java Executor框架提供了ThreadPoolExecutor类去执行Callable和Runnable任务,这样避免了大量的复杂代码的操作,但是有时你需要定时去执行你的任务,这个时候你就要使用ScheduledThreadPoolExecutor类了。

先写个基本的任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Task implements Runnable
{
private String name;
public Task(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void run()
{
try {
System.out.println("Doing a task during : " + name + " - Time - " + new Date());
}
catch (Exception e) {
e.printStackTrace();
}
}
}

一段时间后执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ScheduledThreadPoolExecutorExample
{
public static void main(String[] args)
{
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
Task task1 = new Task ("Demo Task 1");
Task task2 = new Task ("Demo Task 2");
System.out.println("The time is : " + new Date());
executor.schedule(task1, 5 , TimeUnit.SECONDS);
executor.schedule(task2, 10 , TimeUnit.SECONDS);
try {
executor.awaitTermination(1, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
}
}

The time is : Tue Jan 25 16:14:07 IST 2017
Doing a task during : Demo Task 1 - Time - Tue Jan 25 16:14:12 IST 2017
Doing a task during : Demo Task 2 - Time - Tue Jan 25 16:14:17 IST 2017

执行任务时间片的形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ScheduledThreadPoolExecutorExample
{
public static void main(String[] args)
{
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Task task1 = new Task ("Demo Task 1");
System.out.println("The time is : " + new Date());
ScheduledFuture<?> result = executor.scheduleAtFixedRate(task1, 2, 5, TimeUnit.SECONDS);
try {
TimeUnit.MILLISECONDS.sleep(20000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
}
}

Output:

The time is : Tue Jan 25 16:20:12 IST 2017
Doing a task during : Demo Task 1 - Time - Tue Jan 25 16:20:14 IST 2017
Doing a task during : Demo Task 1 - Time - Tue Jan 25 16:20:19 IST 2017
Doing a task during : Demo Task 1 - Time - Tue Jan 25 16:20:24 IST 2017
Doing a task during : Demo Task 1 - Time - Tue Jan 25 16:20:29 IST 2017

2016、才觉远去,便起怀念

一年的开始,总是伴着喜庆的色彩。1月份,往往很多公司都要开始准备年会了。作为公司最年轻的团队,也忘记了是哪个家伙想的,让我们年会上唱bigbang的loser😭。我和另外4个小伙伴不幸就被选上了,拼了,就算是为了我们这个团队,依稀的记得的那一晚,我们玩的很嗨。虽然还是在实习阶段,可是我已觉得我早已融入进这个团队了,和他们成为了好朋友。从大三暑期实习开始,我就已经知道我没有寒假和暑假了,这一年的春节,虽然在家里呆的时间也不长。对我来说是不同的,因为我自己可以赚钱了,拿着这些钱给父母买了些东西,可以外婆包红包了就像当初她给我们一样。

匆匆茫茫的回到了公司,重新开始了工作。元宵节,和几个大学一起过的,在一个城市,有些同学还是不错的,至少平时我们可以相互发发牢骚。感觉到了3月份,工作才慢慢进入正轨,这个时候的我也开始思考了毕业之后的去向了,思考着是继续留在实习的公司还是去重新找一家,最终考虑的结果是留在这个公司,因为这里有很多我熟悉的人和事。3月末,了解到团队中有些实习生要走了,有要去读研深造的,有要换公司的,在送别聚餐的那一晚,我们很多都喝多了。或许我们都知道有相聚就有离开,但是没想到这才是刚刚开始而已。

杭州的4月天是很舒服的,听说一个高中的同桌同学来到了浙大读研,我当初怎么没看出来你还有这个潜力。我们一起在杭州西湖旁边的山上踏着青,记得她说过,还是老同学在一起实在啊。是啊,高中时的那些同学们,我还记的和你们一起奋斗和玩耍的时光啊。五月初,我们团队自驾游去了安吉的天荒坪了,虽然那个周末天气不是很好,但我们还是玩的很开心的。回来的路上,我们在车上把后备箱的几瓶酒在路上全吹掉了,一种宿醉的感觉。

想到马上要回到学校,内心还是很激动过的,可能都知道大学四年就剩下这1个多月时间了,同学宿舍之间走动更加的频繁了。时间流逝的总是快的,做毕设、写论文、答辩、拍毕业照、毕业酒会。马上就要毕业了,谁又能想到答辩那天走出教室后,直到现在我都没有再进去过大学教室。是啊,要再见了,我的小伙伴们。

6月25号,从南昌来到杭州,其实内心还是很激动的,因为我知道我再也不是实习生了,我马上要转为公司的正式员工了。可是令我想不到的是很多事情都在改变,领导也不再是之前的领导,一年时间真的是习惯了你们的存在(后面在新的一家公司上班时,叫错了几次领导的名字😅)。接下来公司工作环境就变得有些诡异了,当时也没想太多,更深层次的东西我也想不到,只是感觉,这种工作状态还不如之前实习的那个团队,当工作失去激情,离离开也就不远了。好在,我并没有因为这样的状态而颓废,这段时间,本人开了博客,开始写写技术文章,学习新技术以充实自己,这段时间的知识积累,也对我后面找新的工作有了帮助。接下来杭州慢慢开始成为世界上最安全最干净的城市了,因为受全世界关注的G20要在杭州举行了,杭州真的很不错,我喜欢这座城。

离开,9月20号,因某些原因,从公司离开。接下来,很多的散伙饭,这让我想起了毕业时的场景,没有不散的宴席,谁会饿着肚子去呐喊,开始准备写简历去迎接新的工作了。面了6家企业,我最终还是选择了感觉最有发展前景的C公司,准备国庆后迎接新的环境。

深刻体会来到一家新的企业,都要给时间去适应的。10月基本上也就是去适应公司环境的过程了;公司发展迅速,项目时间安排紧,而这给我带来的影响就是经常加班了。可能是为了缓解压力,11月份公司安排一次团建,是去安吉,顿时有种熟悉的感觉。

一年过的真的很快啊,突然就到了一年的最后一个月了,这个月真是工作以来忙碌的一个月啊,就连今天这一年的最后一天,都在公司加班(😂,其实心根本不在状态)。还有就是这个月也是最难忘的,因为我遇到了一个让我心动的女孩,是的,那是心动的感觉。

在新的一年里,希望自己能养成看书的习惯吧,然后让自己运动起来,最后希望就是工作轻松些,似乎这也不太实际了,成长总要付出努力和汗水。

设计模式之策略模式

定义

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

原则基础

封装变化;多用组合、少用继承;针对接口编程,而不是针对实现编程。

1
2

分布式系统

高吞吐,高并发,底延迟

分布式系统提高承载量的基本手段

## 分层模型(路由,代理)

    典型的的就是三层结构:接入,逻辑,存储

## 并发模型(多线程,异步)
    多线程
    异步回调基于非阻塞的I/O操作(网络和文件)

## 缓冲技术
## 存储技术(NoSQL)

分布式系统在可管理性上造成的问题

## 硬件故障率

## 资源利用率优化

## 软件服务内容更新

 ## 数据统计和决策

解决分布式系统可管理性的基本手段

## 目录服务(ZooKeeper)

## 消息队列服务(ActiveMQ、ZeroMQ、Jgroups)

## 事务系统

## 自动部署工具(Docker)

## 日志服务(log4j)

分布式系统在开发效率上造成的问题和解决思路