主题:Java应用基础:25个精选试题分享[5]
http://www.educity.cn 作者:佚名 来源:希赛教育
22. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有三种实现方法,分别为:
① 实现Runnable接口,覆盖Run()方法。
② 继承Thread,覆盖Run()方法。
③ 继承TimerTask,覆盖Run()方法。
同步的实现是在方法前加synchronized,在调用wait()和notify()。
23. 请说出你所知道的线程同步的方法。
答:1.synchronized方法:通过在方法声明中加入synchronized关键字来声明synchronized方法。
2. synchronized块:通过synchronized关键字来声明synchronized 块。
24. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不可以。synchronized方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程才能获得该锁,重新进入可执行状态。
25. 用Java SOCKET编程,实现简单的Echo功能。
如: 客户端从键盘输入hi(当用户输出exit 退出程序),服务端响应为hi(服务器要求为多线程)
解:服务器程序:
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();
}
}
22. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有三种实现方法,分别为:
① 实现Runnable接口,覆盖Run()方法。
② 继承Thread,覆盖Run()方法。
③ 继承TimerTask,覆盖Run()方法。
同步的实现是在方法前加synchronized,在调用wait()和notify()。
23. 请说出你所知道的线程同步的方法。
答:1.synchronized方法:通过在方法声明中加入synchronized关键字来声明synchronized方法。
2. synchronized块:通过synchronized关键字来声明synchronized 块。
24. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不可以。synchronized方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程才能获得该锁,重新进入可执行状态。
25. 用Java SOCKET编程,实现简单的Echo功能。
如: 客户端从键盘输入hi(当用户输出exit 退出程序),服务端响应为hi(服务器要求为多线程)
解:服务器程序:
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();
}
}