本帖最后由 半世心修 于 2015-5-23 16:26 编辑
题目一:try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?使用程序验证。在异常机制中,捕获错误的时候finally是一定会被执行的,尽管try中有一个return。如果jvm运行到了try后意外退出了那就可能出现finally不执行的情况。
public static void calculate(int x){
System.out.println(5/x);
}
public static void main(String args[]){
try {
calculate(2);
return;
} catch (ArithmeticException e) {
System.out.println("false");
}finally{
System.out.println("finally is go on");
}
}
//输出2 finally is go on
题目二:将某一盘符下只要是文件夹里有.java结尾的文件就输出它的绝对路径,注意是多级文件夹哦。
首先得有个文件夹嘛,然后通过File类的listFiles方法获取文件夹下所有的文件,最后判断这些文件是否以.java为后缀,如果是,就输出路径。
public static void realPath(String path){
File f = new File(path);
for(File name:f.listFiles()){
System.out.println(name);
if(name.toString().endsWith(".java")){
System.out.println(name.toString());
}
}
}
public static void main(String args[]){
realPath("C:/Users/Administrator/Desktop/test");
}
输出:C:\Users\Administrator\Desktop\test\Test.java
题目三:编写程序分别使用Synchronized和Lock实现一个买票程序的线程安全问题,两套代码分开写哦!
额,第一个,实现Runnable接口并重写run方法,这个不难,LOCK给忘了啊,去了解下先。。
public class Test implements Runnable{
public static int x = 100;
public void run() {
while (x> 0)
this.shop(Thread.currentThread().getName());
}
public static synchronized void shop(String name){
if(x>0){
System.out.println(name+"-----"+x);
x--;
}
}
public static void main(String args[]){
Thread t1 = new Thread(new Test(),"1");
Thread t2 = new Thread(new Test(),"2");
t1.start();
t2.start();
}
LOCK
这个看过一个例子就知道怎么写了,一样是线程同步的,之前忘了,看来得回去看看多线程了,代码来了:
public class Test implements Runnable{
public static int x = 100;
public void run() {
while (x> 0)
try {
this.shop(Thread.currentThread().getName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void shop(String name){
Lock l = new ReentrantLock();
if(x>0){
try {
l.lock();
System.out.println(name+"-----"+x);
x--;
} catch (Exception e) {
// TODO: handle exception
}finally{
l.unlock();
}
}
}
public static void main(String args[]){
Thread t1 = new Thread(new Test(),"1");
Thread t2 = new Thread(new Test(),"2");
t1.start();
t2.start();
}
|