20. 編程題::寫(xiě)一個(gè)滿足Singleton模式的類(lèi)出來(lái)
public class SingletonTest
{
private static SingletonTest sp;
private SingletonTest() {}
public static SingletonTest getInstance()
{
if (sp==null)
{ sp=new SingletonTest(); }
return sp;
}
21. 編程:編寫(xiě)一個(gè)截取字符串的函數(shù),輸入為一個(gè)字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個(gè),如“我ABC”4,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個(gè)”
解:import java.io.*;
class interceptString
{
String interceptStr;
int interceptByte;
public interceptString(String str,int bytes)
{
interceptStr=str;
interceptByte=bytes;
System.out.println("字符串為:'"+interceptStr+"';字節(jié)數(shù)為:"+interceptByte);
}
public void interceptIt()
{
int interceptCount; interceptCount=(interceptStr.length()%interceptByte==0)?(interceptStr.length()/interceptByte):(interceptStr.length()/interceptByte+1);
System.out.println("截取后斷數(shù)為:"+interceptCount);
for (int i=1;i<=interceptCount ;i++ )
{ if (i==interceptCount)
{
System.out.println(interceptStr.substring((i-1)*interceptByte,interceptStr.length()));
} else
{
System.out.println(interceptStr.substring((i-1)*interceptByte,(i*interceptByte)));
}
}
}
public static void main(String[] args)
{
String s="";
InputStreamReader ir=new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(ir);
try {
s = in.readLine();
interceptString ss = new interceptString(s,4);
ss.interceptIt();
in.close();
} catch (IOException e)
{ e.printStackTrace();}
}
}
22. 多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
答:多線程有三種實(shí)現(xiàn)方法,分別為:
、 實(shí)現(xiàn)Runnable接口,覆蓋Run()方法。
、 繼承Thread,覆蓋Run()方法。
、 繼承TimerTask,覆蓋Run()方法。
同步的實(shí)現(xiàn)是在方法前加synchronized,在調(diào)用wait()和notify()。
23. 請(qǐng)說(shuō)出你所知道的線程同步的方法
答:1. synchronized 方法:通過(guò)在方法聲明中加入 synchronized關(guān)鍵字來(lái)聲明 synchronized 方法。
2. synchronized 塊:通過(guò) synchronized關(guān)鍵字來(lái)聲明synchronized 塊。
24. 當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
答:不可以。synchronized 方法都必須獲得調(diào)用該方法的類(lèi)實(shí)例的鎖方能執(zhí)行,否則所屬線程阻塞,方法一旦執(zhí)行,就獨(dú)占該鎖,直到從該方法返回時(shí)才將鎖釋放,此后被阻塞的線程才能獲得該鎖,重新進(jìn)入可執(zhí)行狀態(tài)。
25. 用JAVA SOCKET編程,實(shí)現(xiàn)簡(jiǎn)單的Echo功能
如: 客戶端從鍵盤(pán)輸入 hi (當(dāng)用戶輸出exit 退出程序),服務(wù)端響應(yīng)為 hi(服務(wù)器要求為多線程)
解:服務(wù)器程序:
import java.io.*;
import java.net.*;
public class MyServer extends Thread{
private Socket cq ;
public MyServer(Socket cq)
{
this.cq = cq;
}
public void run()
{
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(cq.getInputStream()));
PrintWriter out=new PrintWriter(cq.getOutputStream());
while(true)
{
String str=in.readLine();
System.out.println(str);
out.println("message: "+str);
out.flush();
if(str.equals("exit"))
break;
}
}
catch(IOException e)
{
System.out.println(e.message());
}
}
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(8009);
while(true)
{
Socket s=server.accept();
new MyServer(s).start();
}
}
}
客戶端程序:
import java.net.*;
import java.io.*;
public class MyClient{
public static void main(String[] args)throws Exception
{
Socket server=new Socket("localhost",8009);
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str=br.readLine();
out.println(str);
out.flush();
if(str.equals("exit")){
break;
}
System.out.println(in.readLine());
}
server.close();
}
}
相關(guān)推薦:全國(guó)計(jì)算機(jī)等級(jí)考試將于3月28日至4月1日舉行北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |