|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。
一.完成多线程
1.子虚的多线程
例1:
publicclassTestThread
{
inti=0,j=0;
publicvoidgo(intflag)
{
while(true)
{
try{Thread.sleep(100);
}
catch(InterruptedExceptione)
{
System.out.println("Interrupted");
}
if(flag==0)i++;
System.out.println("i="+i);
}
else
{
j++;
System.out.println("j="+j);
}
}
}
publicstaticvoidmain(String[]args)
{
newTestThread().go(0);
newTestThread().go(1);
}
}下面程序的运转了局为:
i=1
i=2
i=3
。。。
了局将一向打印出I的值。我们的企图是当在while轮回中挪用sleep()时,另外一个线程就将起动,打印出j的值,但了局却并非如许。关于sleep()为何不会呈现我们料想的了局,鄙人面将讲到。
2.完成多线程
经由过程承继class Thread或完成Runnable接口,我们能够完成多线程
2.1经由过程承继class Thread完成多线程
class Thread中有两个最主要的函数run()和start()。
1)run()函数必需举行覆写,把要在多个线程中并行处置的代码放到这个函数中。
2)固然run()函数完成了多个线程的并行处置,但我们不克不及间接挪用run()函数,而是经由过程挪用start()函数来挪用run()函数。在挪用start()的时分,start()函数会起首举行与多线程相干的初始化(这也是为何不克不及间接挪用run()函数的缘故原由),然后再挪用run()函数。
例2:
publicclassTestThreadextendsThread
{
privatestaticintthreadCount=0;
privateintthreadNum=++threadCount;
privateinti=5;
publicvoidrun()
{
while(true)
{
try
{
Thread.sleep(100);
}
catch(InterruptedExceptione)
{
System.out.println("Interrupted");
}
System.out.println("Thread"+threadNum+"="+i);
if(--i==0)return;
}
}
publicstaticvoidmain(String[]args)
{
for(inti=0;i<5;i++)
newTestThread().start();
}
}运转了局为:
Thread1=5
Thread2=5
Thread3=5
Thread4=5
Thread5=5
Thread1=4
Thread2=4
Thread3=4
Thread4=4
Thread1=3
Thread2=3
Thread5=4
Thread3=3
Thread4=3
Thread1=2
Thread2=2
Thread5=3
Thread3=2
Thread4=2
Thread1=1
Thread2=1
Thread5=2
Thread3=1
Thread4=1
Thread5=1
从了局可见,例2能完成多线程的并行处置。
<p>**:在下面的例子中,我们只用new发生Thread对象,并没有效reference来纪录所发生的Thread对象。依据渣滓接纳机制,当一个对象没有被reference援用时,它将被接纳。可是渣滓接纳机制对Thread对象“不建立”。由于每个Thread城市举行注册举措,以是即便我们在发生Thread对象时没有指定一个reference指向这个对象,实践上也会在某个中央有个指向该对象的reference,以是渣滓接纳器没法接纳它们。
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。 |
|