首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

多线程 发短信 帮助解决思路

2012-03-30 
多线程发短信 帮助有个项目中用到发短信的功能,要求能短信群发,然后由另一线程去执行短信发送功能实现如下

多线程 发短信 帮助
有个项目中用到发短信的功能,要求能短信群发,然后由另一线程去执行短信发送功能实现如下:
 

Java code
public class SendSmsDemo extends Thread {    private static SmsHandler smsHandler;    private static BlockingQueue<SMS> queue = new LinkedBlockingQueue<SMS>();    private static SendSmsDemo instance = null;    private SendSmsDemo() {    }    public synchronized static SendSmsDemo getInstance(SmsHandler handler) {        if (instance == null) {            System.out.println("new instatnce...");            instance = new SendSmsDemo();            instance.setDaemon(true);            smsHandler = handler;            instance.start();        }        return instance;    }    public void add(SMS sms) {        queue.add(sms);    }    @Override    public void run() {        while(true){            SMS sms=new SMS();            try {                sms = queue.take();            } catch (InterruptedException e) {                e.printStackTrace();            }            smsHandler.sendSMS(sms);        }    }}

每次要发短息的时候实际是执行demo=SendSmsDemo.getinstance() demo.add(sms)
各位看以下有什么问题,或更好的方式。

[解决办法]
用BlockingQueue 存放数据 用多线程进行短信发送
[解决办法]
问题很大啊。。。
1、 while(true)。。。
线程创建了后,不能结束,也就意味着线程资源永远不能回收。。。

2、SMS sms=new SMS(); 。。。
不明白为什么要new这个SMS对象.

3、try {
sms = queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
smsHandler.sendSMS(sms);
队列中一定有sms吗?

这种消息队列处理,可以参考下生产者消费者模式。

[解决办法]
探讨

引用:

问题很大啊。。。
1、 while(true)。。。
线程创建了后,不能结束,也就意味着线程资源永远不能回收。。。

2、SMS sms=new SMS(); 。。。
不明白为什么要new这个SMS对象.

3、try {
sms = queue.take();
} catch (InterruptedException e) ……

[解决办法]
queue.take() 如果 Queue 中没有对象的话,会在这里一直待着,直到产生中断为止。

楼主代码改进的地方有很多:

Java code
        while(true){            SMS sms=new SMS();            try {                sms = queue.take();            } catch (InterruptedException e) {                e.printStackTrace();            }            smsHandler.sendSMS(sms);        }
[解决办法]
不太会了

热点排行