Concurrency and multi-thread learn from Cloud Computer Individual Project 3.2

来源:互联网 发布:制作动漫人物的软件 编辑:程序博客网 时间:2024/06/06 07:43

CC怎么都做不出结果的感觉真是生不如死,

然而做出来之后爽!得!要!死!!!


这次的project是结合了多线程处理的同步并发以及synchronized锁的应用,

做出来之后学到了不少东西。

首先,最重要的是,锁的应用,如何用synchronized以及PriorityBlockingQueue来控制不同进程之间的运行的先后顺序。

在Java中,每个Object有且只有一个锁,而每个类又有且只有一个锁


Write Up中对读写的要求是:

1. 对于不同的key,写的操作要同步进行

2. 对于相同的key,最后存在数据库里的一定要是时间戳最后的那个

3. 读的时候Block写,写的时候也要block读。


思路:

因为不同的Key的写和读是同步进行的,所以每一个Key都要有一个不同的锁

因为同一个Key之间的读写之间需要互斥,所以对于同一个Key要有一个锁lock住读和写




然后通过System.out.println,我们可以得到各个Test是如何测试我们的读写的,

每个Test都用不同的逻辑测试了我们的代码,我们可以利用其反馈来修正我们代码的逻辑。

--------- Test 1 ---------put: a  value: 1put: b  value: 2put: c  value: 3put: d  value: 4put: e  value: 5put: e  value: 5get: a  loc: 1get: b  loc: 2get: c  loc: 2get: d  loc: 3get: e  loc: 3--------- Test 2 ---------put: a  value: 11get: a  loc: 1put: b  value: 22get: b  loc: 2put: c  value: 33get: c  loc: 2put: d  value: 44get: d  loc: 3put: e  value: 55get: e  loc: 3--------- Test 3 & 4 ---------put: a  value: 111get: b  loc: 2get: a  loc: 1put: a  value: 1111put: a  value: 11111get: a  loc: 1get: b  loc: 2put: b  value: 2222put: b  value: 22222put: c  value: 3333get: b  loc: 2get: c  loc: 2--------- Test 5 ---------put: a  value: 1111put: a  value: 11111put: a  value: 111111put: a  value: 1111111put: a  value: 11111111get: a  loc: 1put: b  value: 2222put: b  value: 22222put: b  value: 222222put: b  value: 2222222put: b  value: 22222222get: b  loc: 2put: c  value: 3333put: c  value: 33333put: c  value: 333333put: c  value: 3333333put: c  value: 33333333get: c  loc: 2put: d  value: 4444put: d  value: 44444put: d  value: 444444put: d  value: 4444444put: d  value: 44444444get: d  loc: 3put: e  value: 5555put: e  value: 55555put: e  value: 555555put: e  value: 5555555put: e  value: 55555555get: e  loc: 3--------- Test 6 ---------put: a  value: 5put: b  value: 4put: c  value: 3put: d  value: 2put: e  value: 1put: e  value: 11put: d  value: 22put: c  value: 33put: b  value: 44put: a  value: 55put: b  value: 444put: b  value: 4444put: a  value: 555put: a  value: 55555put: a  value: 555555put: a  value: 55555555put: b  value: 44444444put: c  value: 33333put: c  value: 333333put: c  value: 3333333put: c  value: 33333333put: d  value: 22222put: d  value: 222222put: d  value: 2222222put: d  value: 22222222put: e  value: 11111put: e  value: 111111put: e  value: 1111111put: e  value: 11111111get: a  loc: 1get: e  loc: 3get: b  loc: 2get: c  loc: 2get: a  loc: 1get: d  loc: 3


Test1,2都很简单,一个是先全部写,再全部读,另一个是写一个读一个。

我们可以利用Test1,2的反馈来测试我们是否正确利用了API。

一开始我就是没用对API,导致了输出怎么都不对。









0 0
原创粉丝点击