路人
导航
IT博客
首页
新随笔
联系
聚合
管理
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
统计
随笔 - 39
文章 - 0
评论 - 4
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
(39)
2012年9月 (1)
2012年6月 (1)
2006年5月 (1)
2006年3月 (5)
2006年2月 (1)
2006年1月 (4)
2005年12月 (20)
2005年11月 (6)
相册
test
搜索
积分与排名
积分 - 10897
排名 - 299
最新评论
1. re: 晕~搞了45分钟
评论内容较长,点击标题查看
--山岗
2. re: 晕~搞了45分钟
如果String str2 = new String("asda&f")呢?
--天外流星
3. re: 高级搜索
搞Lucene,看来要下苦功夫啊.
--天外流星
4. re: 个人简历
评论内容较长,点击标题查看
--天外流星
阅读排行榜
1. java 连接 ladp(sun one)(1368)
2. HTTP Error Codes(zt)(993)
3. Struts+Spring+Hibernate开发实例(749)
4. 个人简历(721)
5. JAVA时间日期 和 分页(650)
评论排行榜
1. 晕~搞了45分钟(2)
2. 个人简历(1)
3. 高级搜索(1)
4. lucene小结(0)
5. 初学者入门:J2SDK和TOMCAT的安装及配置(0)
JAVA多线程
package
com.thread;
public
class
SyncTest
{
public
static
void
main(String args[])
{
SyncStack stack
=
new
SyncStack();
//
下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象
Runnable source
=
new
Producer(stack);
Runnable sink
=
new
Consumer(stack);
Thread t1
=
new
Thread(source);
//
线程实例化
Thread t2
=
new
Thread(sink);
//
线程实例化
t1.start();
//
线程启动
t2.start();
//
线程启动
}
}
class
SyncStack
{
//
同步堆栈类
private
int
index
=
0
;
//
堆栈指针初始值为0
private
char
[] buffer
=
new
char
[
6
];
//
堆栈有6个字符的空间
public
synchronized
void
push(
char
c)
{
//
加上互斥锁
while
(index
==
buffer.length)
{
//
堆栈已满,不能压栈
try
{
this
.wait();
//
等待,直到有数据出栈
}
catch
(InterruptedException e)
{
}
}
this
.notify();
//
通知其它线程把数据出栈
buffer[index]
=
c;
//
数据入栈
index
++
;
//
指针向上移动
}
public
synchronized
char
pop()
{
//
加上互斥锁
while
(index
==
0
)
{
//
堆栈无数据,不能出栈
try
{
this
.wait();
//
等待其它线程把数据入栈
}
catch
(InterruptedException e)
{
}
}
this
.notify();
//
通知其它线程入栈
index
--
;
//
指针向下移动
return
buffer[index];
//
数据出栈
}
}
class
Consumer
implements
Runnable
{
//
消费者类
SyncStack theStack;
//
消费者类获得的字符都来自同步堆栈
public
Consumer(SyncStack s)
{
theStack
=
s;
}
public
void
run()
{
char
c;
for
(
int
i
=
0
; i
<
20
; i
++
)
{
c
=
theStack.pop();
//
从堆栈中读取字符
System.out.println(
"
Consumed:
"
+
c);
//
打印字符
try
{
Thread.sleep((
int
) (Math.random()
*
1000
));
/**/
/*
每读取一个字符线程就睡眠
*/
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class
Producer
implements
Runnable
{
//
生产者类
SyncStack theStack;
//
生产者类生成的字母都保存到同步堆栈中
public
Producer(SyncStack s)
{
theStack
=
s;
}
public
void
run()
{
char
c;
for
(
int
i
=
0
; i
<
20
; i
++
)
{
c
=
(
char
) (Math.random()
*
26
+
'
A
'
);
//
随机产生20个字符
theStack.push(c);
//
把字符入栈
System.out.println(
"
Produced:
"
+
c);
//
打印字符
try
{
Thread.sleep((
int
) (Math.random()
*
1000
));
/**/
/*
每产生一个字符线程就睡眠
*/
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
posted on 2006-03-18 14:50
山岗
阅读(253)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © 山岗