线程池的问题求教~大家都进来看看啊~ 当然可以处理不同的任务,这是典型的oop的多态和动态绑定概念。定义一个基础类,继承出几个子类。子类均OverRide基础类的工作函数(如doWork()),做不同的工作就可以了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢前面两位的支持和帮助!我想再说说我的想法: 我的问题主要出在线程的处理上,对于线程而言,做什么工作是由run()函数的定义来确定的~线程池中的所有线程使用的是同一个run()函数我想知道有没有什么办法能在线程运行起来以后还可以将不同的参数赋值进去 实现线程池,好说;给不同的线程传递不同的参数,也好说。class Test extends Thread{ int numChange; Object dataSyn=new Object(); public void run() { while(true) { synchronized(dataSyn) { dealChange(); wait(1000); } } } public void dealChange() { System.out.println(numChange); //对 int 型的数dealChange 进行处理 } public void change(int change) { this.numChange=change; Synchronized(dataSyn) { notify(); } } public static void main(String agv[]) { Test t[]=new Test[3]; for(i=0;i<3;i++) { t[i].start; } for(i=0;i<3;i++) { t[i].change(i); } } } 线程做什么确实是由同一个run()方法决定的但是每一个线程的都是一个Runable的对象他们都可以有自己的参数因此,只要你在run()方法中根据参数的不同,执行不同的逻辑那么即使是同一个run()方法你也可以做不同的事情的^_^ 谢谢大家的热情相助!antpower(方向不对,换个姿势再睡.) :对于你给出的程序,我有个疑惑:dealChange();和wait(1000);如果调换运行次序,结果会怎么样,有没有影响?目前,我觉得我的程序和你的程序从大体框架上来说都差不多,但是我的这两个方法的次序正好与你的相反。下午有时间我会上机调试确认一下的,如果你愿意也不妨给我讲解一下,呵呵:)也谢谢danceflash(Wine) 。希望大家继续关注我的这个问题,直到问题解决~~ dealChange();和wait(1000);怎么能换顺序呢?等先执行了线程的操作再进入等待状态! 但是,线程在最开始的时候只是预先产生进入等待队列中,这个时候并不需要进行任何操作的。只有等到一个任务来到,唤醒了线程后,被唤醒的线程才开始执行操作!今天调了一下午别的程序,只找到一个bug,而且程序的运行总是不尽如人意,真是郁闷~! hohona(梦想) :调换了次序,结果不会有什么影响。按照我的次序:dealChange();wait(1000);那么会在变化之前就有一次对numberChange的处理。按照你的次序:wait(1000);dealChange();则是等到变化出现以后才对numberChange的处理。看你是什么要求,可以选择一下两者的次序。你可以参照while(){} 和do{}while的逻辑次序理解这个东西。 通过调用父类函数读取子类实例域 想获取一个MP3文件最后的128个字节,这样的代码要怎么写? 你瞧瞧这界面写的..... 请问如何根据指定大小对文件进行ZIP压缩?急 java mail的问题 Obj.toString()和String.valueOf(Obj)的区别? [Microsoft][ODBC Microsoft Access Driver]可选的功能未实现 帮组合一下..一次更新7万条记录的程序.. 请高手指点一下吧!!!! 新手有关绘图的问题 如何注册监听 请问哪里有jbuilder8.0下载地址呢?
我想再说说我的想法:
我的问题主要出在线程的处理上,
对于线程而言,做什么工作是由run()函数的定义来确定的~
线程池中的所有线程使用的是同一个run()函数
我想知道有没有什么办法能在线程运行起来以后还可以将不同的参数赋值进去
{
int numChange;
Object dataSyn=new Object(); public void run()
{
while(true)
{
synchronized(dataSyn)
{
dealChange();
wait(1000);
}
}
}
public void dealChange()
{
System.out.println(numChange);
//对 int 型的数dealChange 进行处理
}
public void change(int change)
{
this.numChange=change;
Synchronized(dataSyn)
{
notify();
}
}
public static void main(String agv[])
{
Test t[]=new Test[3];
for(i=0;i<3;i++)
{
t[i].start;
}
for(i=0;i<3;i++)
{
t[i].change(i);
}
}
}
但是每一个线程的都是一个Runable的对象
他们都可以有自己的参数
因此,只要你在run()方法中根据参数的不同,执行不同的逻辑
那么即使是同一个run()方法你也可以做不同的事情的^_^
antpower(方向不对,换个姿势再睡.) :
对于你给出的程序,我有个疑惑:dealChange();和wait(1000);如果调换运行次序,结果会怎么样,有没有影响?目前,我觉得我的程序和你的程序从大体框架上来说都差不多,但是我的这两个方法的次序正好与你的相反。
下午有时间我会上机调试确认一下的,如果你愿意也不妨给我讲解一下,呵呵:)
也谢谢danceflash(Wine) 。
希望大家继续关注我的这个问题,直到问题解决~~
等先执行了线程的操作再进入等待状态!
今天调了一下午别的程序,只找到一个bug,而且程序的运行总是不尽如人意,真是郁闷~!
按照我的次序:dealChange();wait(1000);那么会在变化之前就有一次对numberChange的处理。
按照你的次序:wait(1000);dealChange();则是等到变化出现以后才对numberChange的处理。看你是什么要求,可以选择一下两者的次序。你可以参照while(){} 和do{}while的逻辑次序理解这个东西。