Java多线程机制示例Word下载.docx
《Java多线程机制示例Word下载.docx》由会员分享,可在线阅读,更多相关《Java多线程机制示例Word下载.docx(41页珍藏版)》请在冰豆网上搜索。
publicstaticvoidsleep(longmillis,intnanos)throwsInterruptedException
publicfinalvoidsuspend();
publicfinalvoidresume();
publicfinalsynchronizedvoidjoin(longmillis)throwsInterruptedException;
publicfinalsynchronizedvoidjoin(longmillis,intnanos)throwsInterruptedException;
publicfinalvoidjoin()throwsInterruptedException;
publicvoidinterrupt();
publicstaticbooleaninterrupted();
publicbooleanisInterrupted();
publicvoiddestroy();
publicfinalnativebooleanisAlive();
publicfinalvoidsetPriority(intnewPriority);
publicfinalintgetPriority();
publicfinalvoidsetName(Stringname);
publicfinalStringgetName();
publicfinalThreadGroupgetThreadGroup();
publicstaticnativeThreadcurrentThread();
publicstaticintactiveCount();
publicstaticintenumerate(Threadtarray[]);
publicnativeintcountStackFrames();
publicstaticvoiddumpStack();
publicfinalvoidsetDaemon(booleanon);
publicfinalbooleanisDaemon();
publicvoidcheckAccess();
publicStringtoString();
}
____________________________________________________________
1.2多线程实现方法
例1:
下面程序演示如何用生成Thread子类的方法来创建新线程。
//ThreadTest1.java
publicclassThreadTest1
ThreadTest1()
{
FirstThreadfirst=newFirstThread();
SecondThreadsecond=newSecondThread();
first.start();
second.start();
}
publicstaticvoidmain(String[]args)
newThreadTest1();
classFirstThreadextendsThread
publicvoidrun()
try
System.out.println("
Firstthreadstartsrunning."
);
for(inti=0;
i<
10;
i++)
{
First"
+i);
sleep(1000);
Firstthreadfinishesrunning."
}
catch(InterruptedExceptione){}
}
classSecondThreadextendsThread
\tSecondthreadstartsrunning."
\tSecond"
\tSecondthreadfinishesrunning."
程序设计了两个线程FirstThread类和SecondThread类,它们都是Thread类的子类覆盖了run()方法,在其中分别进行打印数值的工作。
除了这两个线程外,还有一个线程在执行,就是启动类线程,称它为主线程,它负责生成另外两个线程,再用start()方法启动这两个线程。
线程first和second启动后,并发执行。
观察执行结果会发现两个线程交替打印数据,而不是一个线程完成了所有打印工作后,另一个线程才开始打印工作,这就是多线程的本质。
提示:
线程在调用Thread类方法sleep()睡眠时,有可能产生异常,要求应用程序用try-catch捕获这个异常,如果不用try-catch,程序将出错。
某次的运行结果:
Firstthreadfinishesrunning.
First0
Secondthreadstartsrunning.
Second0
Second1
First1
First2
Second2
First3
Second3
First4
Second4
Second5
First5
First6
Second6
First7
Second7
First8
Second8
First9
Second9
Secondthreadfinishes
________________________________________________
例2:
//ThreadTest2.java
publicclassThreadTest2
{
ThreadTest2()
first.join();
Waitingforfirstthreadtofinish..."
Wakingupsecondthread..."
second.resume();
catch(InterruptedExceptione){}
newThreadTest2();
FirstthreadSTARTSrunning."
FirstthreadFINISHESrunning."
\tSecondthreadSTARTSrunning."
if(i==4)
suspend();
\tSecondthreadFINISHESrunning."
程序仍然使用两个线程打印数据,不同的是second线程在打印数据过程中,发现是数值4,则调用suspend()方法,暂停本身的执行。
主线程用join()方法等线程first执行结束后,用resume()方法来唤醒second线程,second线程被唤醒后,将继续完成打印工作。
join()也将出现InterruptedException异常,所以必须捕获异常。
FirstthreadSTARTSrunning.
SecondthreadSTARTSrunning.
FirstthreadFINISHESrunning.
Waitingforfirstthreadtofinish...
Wakingupsecondthread...
SecondFINISHESfinishes
例3:
下面的程序说明如何用接口来创建线程。
//RunTest.java
publicclassRunTest
RunTest()
Threadthread1=newThread(first);
Threadthread2=newThread(second);
thread1.start();
thread2.start();
newRunTest();
classFirstThreadimplementsRunnable
Thread.sleep(1000);
classSecondThreadimplementsRunnable
这个程序与ThreadTest1.java有相同的功能,只不过现在用实现Runnable接口的方法来创建和执行线程。
______________________________________________
_____________________________________________
2输入输出流类
2.1文件系统
1.文件路径和属性
例子:
下面的程序首先判断给定文件是否存在,如果存在则显示文件路径、绝对路径等,然后再查询文件的属性。
//FileTest1.java
importjava.io.*;
classFileTest1
Stringpath;
if(args.length!
=1)
System.err.println("
Usage:
javaFileTest1FileorDir"
System.exit(-1);
Filef=newFile(args[0]);
if(f.exists())
-----------------------------"
AbsolutePath:
"
+f.getAbsolutePath());
FilePath:
+f.getPath());
FileName:
+f.getName());
ParentDirtory:
+f.getParent());
StringcanRead=f.canRead()?
Yes"
:
No"
;
StringcanWrite=f.canWrite()?
StringisFile=f.isFile()?
StringisDir=f.isDirectory()?
StringisAbs=f.isAbsolute()?
Readable:
+canRead);
Writable:
+canWrite);
Isdirectoty:
+isDir);
Isfile:
+isFile);
Isabsolutepath:
+isAbs);
elseSystem.out.println("
Cannotfoundfile:
+args[0]);
这是一个Application程序,用命令行参数接受输入文件名。
读者可以用不同的命令行参数来执行上面的程序,体会上述方法的区别。
运行:
javaFileTest1d:
\java\filetest1
运行结果:
-----------------------------
d:
\java\filetest1
filetest1
\java
-----------------------------
Yes
Yes
No
Yes
—————
javaFileTest1\java\filetest1
\java\filetest1
\java
No
javaFileTest1\java\filetest1\filetest1.java
\java\filetest1\filetest1.java
\java\filetest1\filetest1.java
filetest1.java
javaFileTest1\java
java
\
\
null
————————————————————————————
2.创建目录和删除文件
例2:
//FileTest2.java
classFileTest2
Filedir,subdir;
javaFileTest2<
newDirPath>
"
dir=newFile(args[0]);
if(dir.exists())
System.out.println(dir.getPath()+"
alreadyexist!
else
if(dir.mkdirs())//说明区别
Createddirectory:
+dir.getAbsolutePath