jake1036
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2010年7月
>
日
一
二
三
四
五
六
27
28
29
30
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
31
1
2
3
4
5
6
7
统计
随笔 - 19
文章 - 0
评论 - 10
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2010年11月 (1)
2010年9月 (1)
2010年8月 (1)
2010年7月 (9)
搜索
最新评论
1. re: java UDP 操作
<font size=4>写的不错!</font>
--o
2. re: java socket连接池
是不是可以在建立一个连接池,比如5个连接到服务器的连接,客户端在需要连接的时候,由服务器发给它一个可用的连接
--songxin
3. re: java socket连接池
@yackl
请问下,有没大概或者简单点的解决办法了?
--songxin
4. re: java socket连接池
这个连接池没什么大的作用啊。
服务器端是在接收到客户端的请求之后起一个线程处理的,
你只能说你有5个线程等待处理socket请求。
--songxin
5. re: java socket连接池[未登录]
垃圾
--aaa
阅读排行榜
1. java socket连接池(5303)
2. java socket非阻塞I/O(4487)
3. java日期控件(2423)
4. java UDP 操作(2371)
5. 利用回调函数在线程和主类中传递信息(782)
评论排行榜
1. java socket连接池(9)
2. java UDP 操作(1)
3. java日期控件(0)
4. java被隐藏的指针(0)
5. java socket非阻塞I/O(0)
2010年7月13日
java日期控件
摘要: 用java实现的日期,精确到分秒
阅读全文
posted @
2010-11-02 14:59
buptduming 阅读(2423) |
评论 (0)
|
编辑
收藏
java被隐藏的指针
摘要: java中的指针思想
阅读全文
posted @
2010-09-07 21:21
buptduming 阅读(317) |
评论 (0)
|
编辑
收藏
java socket非阻塞I/O
摘要: java 异步socket
阅读全文
posted @
2010-08-01 21:19
buptduming 阅读(4487) |
评论 (0)
|
编辑
收藏
java UDP 操作
摘要: 介绍了java 中UDP 传递消息
阅读全文
posted @
2010-07-20 21:19
buptduming 阅读(2371) |
评论 (1)
|
编辑
收藏
java socket连接池
摘要: java实现了socket连接池
阅读全文
posted @
2010-07-16 22:37
buptduming 阅读(5303) |
评论 (9)
|
编辑
收藏
java线程池的概念
摘要: 使用java创建线程池
阅读全文
posted @
2010-07-14 21:08
buptduming 阅读(506) |
评论 (0)
|
编辑
收藏
回调对象列表方式来实现线程和主类之间的交互
摘要: 接口列表实现 线程与主类的交互。
阅读全文
posted @
2010-07-14 15:06
buptduming 阅读(254) |
评论 (0)
|
编辑
收藏
使用回调实例方法进行线程与主类的交互
一 概述
在上一篇随笔中使用的是静态回调函数,故Thread类中没有主类的实例对象。
但是如果调用主类的实例方法,那么在线程类中就需要有主类的实例对象, 这个实例对象一般是通过线程类的构造函数中的参数传递的。
二 代码
和上一篇随笔代码相似,只是在线程类中增加了一个主类 的一个实例变量,通过该实例来调用主类的实例函数。
1 线程类
成员变量中增加一个主类的成员变量callBack。
1
package
cn.bupt.thread;
2
3
import
java.io.
*
;
4
import
java.security.DigestInputStream;
5
import
java.security.MessageDigest;
6
import
java.security.NoSuchAlgorithmException;
7
8
import
cn.bupt.test.CallbackDigestUserInterface;
9
10
public
class
ThreadDemo
implements
Runnable
{
11
12
private
File input ;
13
private
byte
[] digest ;
14
private
CallbackDigestUserInterface callBack ;
15
public
ThreadDemo(File input , CallbackDigestUserInterface callBack)
16
{
17
this
.input
=
input ;
18
this
.callBack
=
callBack ;
19
}
20
21
public
byte
[] getDigest()
22
{
23
return
digest ;
24
}
25
26
27
@Override
28
public
void
run()
{
29
30
try
{
31
FileInputStream in
=
new
FileInputStream(input) ;
32
MessageDigest sha
=
MessageDigest.getInstance(
"
SHA
"
) ;
33
DigestInputStream din
=
new
DigestInputStream(in , sha) ;
34
35
int
b ;
36
37
while
((b
=
din.read())
!=
-
1
) ;
38
din.close() ;
39
40
digest
=
sha.digest() ;
41
42
callBack.receiveDigest(digest, input.getName()) ;
43
44
}
catch
(FileNotFoundException e)
{
45
//
TODO Auto-generated catch block
46
e.printStackTrace();
47
}
catch
(NoSuchAlgorithmException e)
{
48
//
TODO Auto-generated catch block
49
e.printStackTrace();
50
}
catch
(IOException e)
{
51
//
TODO Auto-generated catch block
52
e.printStackTrace();
53
}
54
55
56
57
58
}
59
60
61
62
}
63
2 主类
主类通过线程类的构造函数将 自身对象传递进去 。
package
cn.bupt.test;
import
java.io.File;
import
cn.bupt.thread.ThreadDemo;
public
class
CallbackDigestUserInterface
{
public
void
receiveDigest(
byte
[] digest , String name)
{
StringBuffer result
=
new
StringBuffer(name) ;
result.append(
"
:
"
) ;
for
(
int
j
=
0
; j
<
digest.length ; j
++
)
{
result.append(digest[j]
+
"
"
) ;
}
System.out.println(
"
result :
"
+
result) ;
}
/** */
/**
*
@param
args
*/
public
static
void
main(String[] args)
{
//
TODO Auto-generated method stub
for
(
int
i
=
0
; i
<
args.length ; i
++
)
{
File f
=
new
File(args[i]) ;
CallbackDigestUserInterface u
=
new
CallbackDigestUserInterface() ;
ThreadDemo td
=
new
ThreadDemo(f , u) ;
Thread t
=
new
Thread(td) ;
t.start() ;
}
}
}
3 优点
回调机制可以处理涉及更多的线程,对象和类的更复杂的情况,如果有多个对象关心线程的执行结果
那么线程可以保存一个回调函数列表,某个对象可以通过调用thread类 或者 Runnable 的方法,把自己添加
到列表中,。
如果有多个类的实例关心结果,那么就可以定义一个新的interface ,所有这些类都应该实现这个新的接口,
posted @
2010-07-14 14:14
buptduming 阅读(255) |
评论 (0)
|
编辑
收藏
使用回调实例方法进行线程与主类的交互
摘要: 使用回调实例方法进行线程与主类的交互
阅读全文
posted @
2010-07-14 14:14
buptduming 阅读(265) |
评论 (0)
|
编辑
收藏
利用回调函数在线程和主类中传递信息
摘要: 回调函数实现线程类和主类之间的数据交互
阅读全文
posted @
2010-07-14 11:28
buptduming 阅读(782) |
评论 (0)
|
编辑
收藏
java 通过实现Runnable来实现多线程
摘要: 一 利用Runnable接口来实现多线程,并在线程类中添加一个方法来实现获取线程中的信息 下面是线程类 线程对外返回的是 digest 字节数组 。 &...
阅读全文
posted @
2010-07-14 10:27
buptduming 阅读(326) |
评论 (0)
|
编辑
收藏
java 多线程操作
一 使用多线程的情形
写一个函数来计算多个文件的安全散列函数(SHA),在很大程度上这个程序会受限在I/O上的;即它的速度会受到从磁盘上读文件的限制。
如果将其写成标准的串行处理的程序,那么程序就会花费大量的时间,来等待磁盘驱动器返回数据,而此时的cpu处于空闲状态。
二 使用多线程的感想
如果程序当前处理大量的I/O操作,那么就应该使用多线程的机制来使CPU保持最大的利用率。
package
cn.bupt.duming.thread;
import
java.io.
*
;
import
java.security.
*
;
public
class
ThreadDemo
extends
Thread
{
private
File input ;
public
ThreadDemo(File input)
{
this
.input
=
input ;
}
public
void
run()
{
try
{
FileInputStream in
=
new
FileInputStream(input) ;
MessageDigest sha
=
MessageDigest.getInstance(
"
SHA
"
) ;
DigestInputStream din
=
new
DigestInputStream(in , sha) ;
int
b ;
while
((b
=
din.read())
!=
-
1
) ;
/**/
/*
关闭流
*/
din.close() ;
byte
[] digest
=
sha.digest() ;
StringBuffer result
=
new
StringBuffer(input.toString()) ;
result.append(
"
:
"
) ;
for
(
int
i
=
0
; i
<
digest.length ; i
++
)
{
result.append(digest[i]
+
"
"
) ;
}
System.out.println(result) ;
}
catch
(FileNotFoundException e)
{
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(NoSuchAlgorithmException e)
{
//
TODO Auto-generated catch block
e.printStackTrace();
}
catch
(IOException e)
{
//
TODO Auto-generated catch block
e.printStackTrace();
}
}
}
posted @
2010-07-13 23:44
buptduming 阅读(129) |
评论 (0)
|
编辑
收藏