8月20日张孝祥线程

查看一个方法被其他谁引用。
选中该方法名,右键referrences 选择project


new Thread
(
new Runnable()
{
public void run()
{
System.out.println("Runnable_run");
}
}
)
{
public void run()
{
System.out.println("thread_run");
}
}.start();


在这个线程中,到底执行的是哪个run方法呢?
首先就是普通的new Thread(),这时程序会去看看自己的run方法。
如果没有找到自己的run方法,就会调用父类的run方法。
父类的run方法会去找runnable。
参看一把Thread的源码。


创建线程的两种传统方式:


多线程机制会提高程序的运行效率么?为什么会有多线程下载呢?
多线程不会提高程序效率,一般来说还有可能更慢。CPU只有一个。
一个人做馒头。一直在一张桌子上做馒头,多线程是在三张桌子上做馒头,
他得在三张桌子之间换来换去,切换是需要时间的。

多线程下载为什么会更快呢,这是因为多线程去抢服务器的带宽了。
比如服务器为每一个主机提供20k带宽,那么你多线程相当于是多个主机了,
那么你分到的带宽自然就多了。因为你毕竟只有一台主机,但是相当于多台主机了。

 


//传统定时器的使用
TraditionalTimer
{
public static void main(String[] args)
{
new Timer().schedule(new TimeTask()
{
public void run()
{
System.out.print
}
}
,1000
);
}
}

这里的TimeTask就是一个普通类而已,直接new出它的对象就行,在里面跟线程似的
复写run方法,然后想干什么都填写到run方法里面。

new Timer().schedule(TimeTask,time);
time表示该timeTask多少秒后执行。time单位是毫秒。

new TImer().schedule(TimeTask,time,time_every);
time表示该timeTask多少秒后执行。time单位是毫秒。
time_every表示在time秒执行该timetask后,以后time_every时间内
再执行一把该time_every。

 

 

写一个炸弹,让它这次2秒炸,下次4秒炸。
再一次2秒炸,再一次4秒炸。如此往复。
NOTE:内部类里不能用静态变量。
count = 0;
count = (count + 1) % 2;
这个小技巧实现了count只能在0 1 之间换来换去。
//因为每次都要new所以不是静态变量没法记住
private static int count = 0;

class MyTimeTask extends TimeTask
{
public void run()
{
count = (count + 1) % 2;
new Time().schedual(new MyTimerTask,2000+2000*count);
}
}

new Timer().schedual(new MyTimerTask(),2000);

 

方法2:new两个timetask,task1里时间和task2时间不一样,互相控制。

posted on 2012-08-21 00:49  lightman_21  阅读(174)  评论(0)    收藏  举报

导航