import java.util.Timer;
import java.util.TimerTask;public class CSTimeTask
{
private static CSTimeTask instance = null; private static TimerTask csTimerTask = null; Timer myTimer = null; public CSTimeTask()
{ } public static synchronized CSTimeTask getInstance()
{
if (instance == null)
{
instance = new CSTimeTask();
}
return instance;
} public synchronized void sendHeartBeatNotifyByTime(short peroid)
{ if (csTimerTask != null)
{ csTimerTask.cancel();
myTimer.schedule(csTimerTask, 0, peroid);
}
else
{
csTimerTask = new SetCSTimerTask();
myTimer = new Timer();
myTimer.schedule(csTimerTask, 0, peroid);
} }}class SetCSTimerTask extends TimerTask
{
int i = 0; public void run()
{
System.out.println("Timer Task. " + i);
i++; }
}public class TestA
{ /**
* @param args
*/
public static void main(String[] args)
{
CSTimeTask csTimeTaskA = CSTimeTask.getInstance();
csTimeTaskA.sendHeartBeatNotifyByTime((short)500);
}}public class TestB
{ /**
* @param args
*/
public static void main(String[] args)
{
CSTimeTask csTimeTaskB = CSTimeTask.getInstance();
csTimeTaskB.sendHeartBeatNotifyByTime((short)1000); }}TestA 先去调度,然后TestB去调度,为什么这个时候B去调度A停止不了呢?
你这里没有抛。说明已经不是同一个timer了。
{ /**
* @param args
*/
public static void main(String[] args)
{
CSTimeTask csTimeTaskA = CSTimeTask.getInstance();
csTimeTaskA.sendHeartBeatNotifyByTime((short)500);
CSTimeTask csTimeTaskB = CSTimeTask.getInstance();
csTimeTaskB.sendHeartBeatNotifyByTime((short)1000);
}}
按照上面编个程序.
我尝试用了兄弟双亲链表;二叉树先序遍历;后序遍历,还是做不出来.
请高手编个程序谢谢,我急用.下午就要用了。我已经2个晚上没合眼了..
if (instance == null)
{
System.out.println("new CSTimeTask();");
instance = new CSTimeTask();
}
return instance;
发现你的单例失效了。分别运行TestA,和TestB都创建了CSTimeTask。
正解 你不能写两个main函数啊, 两个主线程和两个线程不是一个概念
所以,一般应该是Socket,RMI之类的。
设置为共有(应该改成私有)。没有达到你所要的效果。直接new就可以了。
其次你说是线程我没有看到线程的影子。恩,只看到了任务调度。
TestA 和 TestB 运行在不同的JVM中,在不同的环境下了,两个各自load了各自的CSTimeTask 说法我赞成。但是在一起运行
也会有问题。你的设计模式有问题。
分别运行TestA与TestB不能得到你要的效果5楼给出的答案正确。