更新時間:2019-04-10 10:34:32 來源:動力節點 瀏覽2160次
1、Java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
字節流,字符流。字節流繼承于InputStreamOutputStream,字符流繼承于ReaderWriter。
在java.io包中還有許多其他的流,低層流與調層流,高層流主要是為了提高性能和使用方便。
2、啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,啟動線程并調用run方法。
3、線程的基本概念、線程的基本狀態以及狀態之間的關系
線程是進程內的并發,沒有自已內存空間,共享進程的,線程間的通信成本較低。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。
4、多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?用什么關鍵字修飾同步方法?
stop()和suspend()方法為何不推薦使用?
ExtendsThread
ImplementsRunnable
同步
Publicsynchronizedaa()
{
}
Publicvoidcc(objectaa)
{
synchronized(aa)
{
}
}
用synchoronized修飾同步方法。
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態,那么其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標志,指出線程應該活動還是掛起。若標志指出線程應該掛起,便用wait()命其進入等待狀態。若標志指出線程應當恢復,則用一個notify()重新啟動線程。
5、集合框架有什么?
CollectionMap
ListsetHashMap
ArrayListlinkedListHashSetTreeSet
6、設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序
publicclassTestThread
{
privateintj;
publicsynchronizedvoidinc()
{
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
publicsynchronizedvoiddec()
{
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
publicstaticvoidmain(String[]args)
{
TestThreadt=newTestThread();
for(inti=0;i<2;i++)
{
Threadinc=newThread(newInc(t));
Threaddec=newThread(newDec(t));
inc.start();
dec.start();
}
}
}
classIncimplementsRunnable
{
privateTestThreadobj;
publicInc(TestThreadobj)
{
this.obj=obj;
}
publicvoidrun()
{
//for(inti=0;i<100;i++)
//{
this.obj.inc();
//}
}
}
classDecimplementsRunnable
{
privateTestThreadobj;
publicDec(TestThreadobj)
{
this.obj=obj;
}
publicvoidrun()
{
//for(inti=0;i<100;i++)
//{
this.obj.dec();
//}
}
}
7、同步和異步有和異同,在什么情況下分別使用他們?舉例說明。
同步:上一段代碼沒的完成,下一段必須等到上一段代碼完成后才可以執行。如買票排隊
異步:上一段代碼沒的完成,下一段不必等到上一段代碼完成就可以執行。如手機發送短信。
8、sleep()和wait()有什么區別?
Sleep是指休眠給定的時間,當這個時間達到之后,線程會再次醒來。
Wait是等待狀態,多長時間不清楚,由另一個線程將其喚醒。
9、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
如只其它方法是同步方法,不可以進入。如果不是可以進入。
10、輸入輸出流的理解:
在java使用流的機制進行數據的傳送,從文件到內存是輸入流,從內存到文件是輸出流,輸入流可以通過read讀取,輸出流以write或print寫入,對于流可以是分為高層流和低層流,低層以一個字節或字符為單位進行處理,高層流以一批數據為單位進行處理。
FileInputStream(System.in)至InputSteamReader至BufferReader
OutputSteam(System.out)至printStream
FileReader至BufferedReader
FileWriter至PrintWriter或bufferWriter
分類:
字節(二進制)
FileInputStream(低層輸入流)
FileOutputStream(低層輸出流)
PrintStream(高層流)System.out.println()
字符(一個char)
FileReader
FileWriter
11、請寫一個程序的讀寫,要求用兩種方式一種是低層流另一種是高層流。
importjava.io.FileWriter;
importjava.io.InputStream;
importjava.io.BufferedWriter;
importjava.io.InputStreamReader;
importjava.io.BufferedReader;
importjava.io.FileReader;
publicclassUntitled1{
publicstaticvoidwriteFileChar()throwsException{
FileWriterf=newFileWriter("c:\\aa.txt");
InputStreamis=System.in;
intc=is.read();
while(((char)c)!='x'){
f.write(c);
c=is.read();
}
f.close();
is.close();
}
publicstaticvoidwriteFileString()throwsException{
FileWriterf=newFileWriter("c:\\aa.txt");
BufferedWriterbwr=newBufferedWriter(f);
BufferedReaderbf=newBufferedReader(newInputStreamReader(System.in));
Stringc=bf.readLine();
while(!c.equals("stop")){
bwr.write(c+"\r\n");
c=bf.readLine();
}
bwr.close();
f.close();
bf.close();
}
publicstaticvoidreadFileChar()throwsException{
FileReaderf=newFileReader("c:\\aa.txt");
intc=f.read();
while(c!=-1){
System.out.print((char)c);
c=f.read();
}
f.close();
}
publicstaticvoidreadFileString()throwsException{
BufferedReaderbf=newBufferedReader(newFileReader("c:\\aa.txt"));
Stringc=bf.readLine();
while(c!=null)
{
System.out.println(c);
c=bf.readLine();
}
bf.close();
}
publicstaticvoidmain(String[]args)throwsException{
readFileString();
}
}
12、如何列出某個目錄下的所有文件
Importjava.io.File;
Filef=newFile("C:\\");
File[]f1=f.listFiles();
for(inti=0;i<f1.length;i++)
{
if(f1[i].isDirectory())
{
System.out.println("dirctoryis"+f1[i].getName());
}
else
{
System.out.println("fileis"+f1[i].getName());
}
}
}
1.如何列出某個目錄下的所有子目錄
publicstaticvoidmain(String[]args)throwsException
{
getFile(newFile("C:\\entityBean"),"\t");
}
publicstaticvoidgetFile(Filef,Stringsem)throwsException
{
System.out.println(sem+f.getName());
Filefl[]=f.listFiles();
if(fl.length>=1)
{
for(inti=0;i<fl.length;i++)
{
if(fl[i].isDirectory())
{
getFile(fl[i],sem+"\t");
}
}
}
}
2.判斷一個文件或目錄是否存在
Filef=newFile("C:\\entityBean");
if(f.exists())
{
System.out.println("exist");
}
else
{
System.out.println("notexist");
}
Socket
13、用socket通訊寫出客戶端和服務器端的通訊,要求客戶發送數據后能夠回顯相同的數據?
publicclassServerSocket_1
{
publicstaticvoidmain(String[]args)
throwsException
{
ServerSocketss=newServerSocket(4001);
Sockets=ss.accept();
BufferedReaderbr=newBufferedReader(newInputStreamReader(s.
getInputStream()));
PrintStreamps=newPrintStream(s.getOutputStream());
Stringtemp=br.readLine();
while(true)
{
System.out.println("客戶端:"+temp);
ps.println(temp);
if(temp.equals("stop"))
{
break;
}
temp=br.readLine();
}
br.close();
ps.close();
ss.close();
}
}
publicclassClientSocket
{
publicstaticvoidmain(String[]args)throwsException
{
Sockets=newSocket("localhost",4001);
PrintStreamps=newPrintStream(s.getOutputStream());
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
BufferedReaderbr_server=newBufferedReader(newInputStreamReader(s.
getInputStream()));
Stringtemp=br.readLine();
while(true)
{
ps.println(temp);
temp=br_server.readLine();
System.out.println("服務器的信息:"+temp);
if(temp.equals("stop"))
{
break;
}
temp=br.readLine();
}
s.close();
br.close();
br_server.close();
}
}
14、介紹Java中的CollectionFrameWork(包括如何寫自己的數據結構)?
答:CollectionFrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素
(Elements)
Map提供key到value的映射
15、請說出你所知道的線程同步的方法
HashTable中的put,get,remove
Vector的相關方法。
相關閱讀
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習