Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
武汉红喜
whatsmars
提交
fe9af858
W
whatsmars
项目概览
武汉红喜
/
whatsmars
通知
3
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
whatsmars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fe9af858
编写于
8月 13, 2019
作者:
武汉红喜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
concurrent test
上级
dc4da67b
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
99 addition
and
99 deletion
+99
-99
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/BlockingStack.java
...t/java/org/hongxi/java/util/concurrent/BlockingStack.java
+40
-0
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/BlockingStackTest.java
...va/org/hongxi/java/util/concurrent/BlockingStackTest.java
+59
-0
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Consumer.java
...t/java/org/hongxi/java/util/concurrent/sync/Consumer.java
+0
-30
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Main.java
.../test/java/org/hongxi/java/util/concurrent/sync/Main.java
+0
-16
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Producer.java
...t/java/org/hongxi/java/util/concurrent/sync/Producer.java
+0
-31
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Work.java
.../test/java/org/hongxi/java/util/concurrent/sync/Work.java
+0
-22
未找到文件。
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/
sync/Work
Stack.java
→
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/
Blocking
Stack.java
浏览文件 @
fe9af858
package
org.hongxi.java.util.concurrent
.sync
;
package
org.hongxi.java.util.concurrent
;
/**
* @author shenhongxi 2019/8/1
1
* @author shenhongxi 2019/8/1
3
*/
public
class
WorkStack
{
public
class
BlockingStack
<
E
>
{
private
static
final
int
DEFAULT_CAPACITY
=
10
;
private
int
index
=
0
;
private
Work
[]
works
=
new
Work
[
6
]
;
Object
[]
items
;
int
size
;
public
synchronized
void
push
(
Work
work
)
{
while
(
index
==
works
.
length
)
{
BlockingStack
()
{
items
=
new
Object
[
DEFAULT_CAPACITY
];
}
BlockingStack
(
int
capacity
)
{
if
(
capacity
<=
0
)
throw
new
IllegalArgumentException
();
items
=
new
Object
[
capacity
];
}
public
synchronized
void
push
(
E
item
)
{
while
(
size
==
items
.
length
)
{
try
{
this
.
wait
();
}
catch
(
InterruptedException
e
)
{}
}
this
.
notifyAll
();
works
[
index
++]
=
work
;
items
[
size
++]
=
item
;
}
public
synchronized
Work
pop
()
{
while
(
index
==
0
)
{
public
synchronized
E
pop
()
{
while
(
size
==
0
)
{
try
{
this
.
wait
();
}
catch
(
InterruptedException
e
)
{}
}
this
.
notifyAll
();
return
works
[--
index
];
return
(
E
)
items
[--
size
];
}
}
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/BlockingStackTest.java
0 → 100644
浏览文件 @
fe9af858
package
org.hongxi.java.util.concurrent
;
/**
* @author shenhongxi 2019/8/13
*/
public
class
BlockingStackTest
{
public
static
void
main
(
String
[]
args
)
{
BlockingStack
<
String
>
stack
=
new
BlockingStack
<>(
10
);
new
Thread
(
new
Producer
(
stack
,
"p1"
)).
start
();
new
Thread
(
new
Consumer
(
stack
,
"c1"
)).
start
();
new
Thread
(
new
Producer
(
stack
,
"p2"
)).
start
();
new
Thread
(
new
Consumer
(
stack
,
"c2"
)).
start
();
}
static
class
Consumer
implements
Runnable
{
private
BlockingStack
stack
;
private
String
name
;
public
Consumer
(
BlockingStack
stack
,
String
name
)
{
this
.
stack
=
stack
;
this
.
name
=
name
;
}
@Override
public
void
run
()
{
for
(
int
i
=
0
;
i
<
60
;
i
++)
{
Object
o
=
stack
.
pop
();
System
.
err
.
println
(
name
+
" consume: "
+
o
);
try
{
Thread
.
sleep
((
long
)
(
Math
.
random
()
*
400
));
}
catch
(
InterruptedException
e
)
{}
}
}
}
static
class
Producer
implements
Runnable
{
private
BlockingStack
stack
;
private
String
name
;
public
Producer
(
BlockingStack
stack
,
String
name
)
{
this
.
stack
=
stack
;
this
.
name
=
name
;
}
@Override
public
void
run
()
{
for
(
int
i
=
0
;
i
<
60
;
i
++)
{
String
data
=
name
+
"-"
+
i
;
stack
.
push
(
data
);
System
.
out
.
println
(
name
+
" produce: "
+
data
);
try
{
Thread
.
sleep
((
long
)
(
Math
.
random
()
*
100
));
}
catch
(
InterruptedException
e
)
{}
}
}
}
}
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Consumer.java
已删除
100644 → 0
浏览文件 @
dc4da67b
package
org.hongxi.java.util.concurrent.sync
;
/**
* @author shenhongxi 2019/8/11
*/
public
class
Consumer
implements
Runnable
{
private
WorkStack
stack
;
private
String
name
;
public
Consumer
(
WorkStack
stack
,
String
name
)
{
this
.
stack
=
stack
;
this
.
name
=
name
;
}
public
String
getName
()
{
return
name
;
}
@Override
public
void
run
()
{
for
(
int
i
=
0
;
i
<
60
;
i
++)
{
Work
work
=
stack
.
pop
();
System
.
out
.
println
(
getName
()
+
"消费"
+
work
);
try
{
Thread
.
sleep
((
long
)
(
Math
.
random
()
*
400
));
}
catch
(
InterruptedException
e
)
{}
}
}
}
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Main.java
已删除
100644 → 0
浏览文件 @
dc4da67b
package
org.hongxi.java.util.concurrent.sync
;
/**
* @author shenhongxi 2019/8/11
*/
public
class
Main
{
public
static
void
main
(
String
[]
args
)
{
WorkStack
stack
=
new
WorkStack
();
new
Thread
(
new
Producer
(
stack
,
"p1"
)).
start
();
new
Thread
(
new
Consumer
(
stack
,
"c1"
)).
start
();
new
Thread
(
new
Producer
(
stack
,
"p2"
)).
start
();
new
Thread
(
new
Consumer
(
stack
,
"c2"
)).
start
();
}
}
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Producer.java
已删除
100644 → 0
浏览文件 @
dc4da67b
package
org.hongxi.java.util.concurrent.sync
;
/**
* @author shenhongxi 2019/8/11
*/
public
class
Producer
implements
Runnable
{
private
WorkStack
stack
;
private
String
name
;
public
Producer
(
WorkStack
stack
,
String
name
)
{
this
.
stack
=
stack
;
this
.
name
=
name
;
}
public
String
getName
()
{
return
name
;
}
@Override
public
void
run
()
{
for
(
int
i
=
0
;
i
<
60
;
i
++)
{
Work
work
=
new
Work
(
i
);
stack
.
push
(
work
);
System
.
out
.
println
(
getName
()
+
"生产"
+
work
);
try
{
Thread
.
sleep
((
long
)
(
Math
.
random
()
*
100
));
}
catch
(
InterruptedException
e
)
{}
}
}
}
whatsmars-common/src/test/java/org/hongxi/java/util/concurrent/sync/Work.java
已删除
100644 → 0
浏览文件 @
dc4da67b
package
org.hongxi.java.util.concurrent.sync
;
/**
* @author shenhongxi 2019/8/11
*/
public
class
Work
{
private
int
id
;
public
Work
(
int
id
)
{
this
.
id
=
id
;
}
public
int
getId
()
{
return
id
;
}
@Override
public
String
toString
()
{
return
"Work"
+
getId
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录