1、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
字节流,字符流。字节流继承于 InputStream OutputStream,字符流继承于 Reader Writer。
在 java.io 包中还有许多其他的流,低层流与调层流,高层流主要是为了提高性能和使用方便。
2、启动一个线程是用 run()还是 start()?
启动一个线程是调用 start()方法,启动线程并调用 run 方法。
3、线程的基本概念、线程的基本状态以及状态之间的关系
线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。
Java 中的线程有四种状态分别是:运行、就绪、挂起、结束。
4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法?
stop()和 suspend()方法为何不推荐使用?
Extends Thread
Implements Runnable
同步
Public synchronized aa()
{
}
Public void cc(object aa)
{
synchronized(aa)
{
}
}
用 synchoronized 修饰同步方法。
答:多线程有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口
同步的实现方面有两种,分别是 synchronized,wait 与 notify反对使用 stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用 suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用 suspend(),而应在自己的 Thread 类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用 wait()命其进入等待状态。若标志指出线程应当恢复,则用一个 notify()重新启动线程。
5、集合框架有什么?
Collection Map
List set HashMap
ArrayList linkedList HashSet TreeSet
6、设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序
public class TestThread
{
private int j;
public synchronized void inc()
{
j++;
System.out.println(Thread.currentThread().getName() + "-inc:" + j);
}
public synchronized void dec()
{
j--;
System.out.println(Thread.currentThread().getName() + "-dec:" + j);
}
public static void main(String[] args)
{
TestThread t=new TestThread();
for (int i = 0; i < 2; i++)
{
Thread inc=new Thread(new Inc(t));
Thread dec=new Thread(new Dec(t));
inc.start();
dec.start();
}
}
}
class Inc implements Runnable
{
private TestThread obj;
public Inc(TestThread obj)
{
this.obj=obj;
}
public void run()
{
// for (int i = 0; i < 100; i++)
// {
this.obj.inc();
// }
}
}
class Dec implements Runnable
{
private TestThread obj;
public Dec(TestThread obj)
{
this.obj=obj;
}
public void run()
{
// for (int i = 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、请写一个程序的读写,要求用两种方式一种是低层流另一种是高层流。
import java.io.FileWriter;
import java.io.InputStream;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.FileReader;
public class Untitled1 {
public static void writeFileChar() throws Exception {
FileWriter f = new FileWriter("c:\\aa.txt");
InputStream is = System.in;
int c = is.read();
while (((char) c) != 'x') {
f.write(c);
c = is.read();
}
f.close();
is.close();
}
public static void writeFileString() throws Exception {
FileWriter f = new FileWriter("c:\\aa.txt");
BufferedWriter bwr=new BufferedWriter(f);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String c = bf.readLine();
while (!c.equals("stop")) {
bwr.write(c+"\r\n");
c = bf.readLine();
}
bwr.close();
f.close();
bf.close();
}
public static void readFileChar() throws Exception {
FileReader f = new FileReader("c:\\aa.txt");
int c = f.read();
while (c!=-1) {
System.out.print((char)c);
c=f.read();
}
f.close();
}
public static void readFileString() throws Exception {
BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt"));
String c = bf.readLine();
while (c!=null)
{
System.out.println(c);
c=bf.readLine();
}
bf.close();
}
public static void main(String[] args) throws Exception {
readFileString();
}
}
12、如何列出某个目录下的所有文件
Import java.io.File;
File f=new File("C:\\");
File[] f1=f.listFiles();
for(int i=0;i { if(f1[i].isDirectory()) { System.out.println("dirctory is"+f1[i].getName()); } else { System.out.println("file is"+f1[i].getName()); } } } 1. 如何列出某个目录下的所有子目录 public static void main(String[] args) throws Exception { getFile(new File("C:\\entityBean"),"\t"); } public static void getFile(File f,String sem) throws Exception { System.out.println(sem+f.getName()); File fl[]=f.listFiles(); if(fl.length>=1) { for(int i=0;i { if(fl[i].isDirectory()) { getFile(fl[i],sem+"\t"); } } } } 2. 判断一个文件或目录是否存在 File f=new File("C:\\entityBean"); if(f.exists()) { System.out.println("exist"); } else { System.out.println("not exist"); } Socket 13、用 socket 通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据? public class ServerSocket_1 { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(4001); Socket s = ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(s. getInputStream())); PrintStream ps=new PrintStream(s.getOutputStream()); String temp = 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(); } } public class ClientSocket { public static void main(String[] args) throws Exception { Socket s = new Socket("localhost", 4001); PrintStream ps = new PrintStream(s.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedReader br_server = new BufferedReader(new InputStreamReader(s. getInputStream())); String temp = 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 中的 Collection FrameWork(包括如何写自己的数据结构)? 答:Collection FrameWork 如下: 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 的相关方法。