- public class TryDemo {
- /** 题目一:try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?使用程序验证。
- */
- //分析:在方法中定义整型变量num赋值为1;根据Java虚拟机的缓存机制来解决之个问题
- // 如果先执行return:那么结果是这样的:[(1+1+1)+ 1] +{[(1+1+1)+ 1]+1} = 9
- // 如果先执行finally:那么结果是这样的: {(1+1)+ [(1+1)+1]} + {(1+1)+ [(1+1)+1]+1} =11
- // 如果输出的结果为3,则是先执行return
- /**
- * 由于以下代码执行的结果是9,所以先执行的是return,后执行finally
- */
- public static void main(String[] args) {
- // 声明Test对象,调用方法
- Test test = new Test();
- test.method();
- }
- }
- class Test {
- public int method() {
- // 声明整型数据num
- int num = 1;
- try {
- num = num++ + num++;
- return num;
- } finally {
- num = ++num + ++num;
- System.out.println("num=" + num);
- }
- }
- }
复制代码
- class TicketDemo
- /**
- *题目三:编写程序分别使用Synchronized和Lock实现一个买票程序的线程安全问题,两套代码分开写哦!
- */
- {
- public static void main(String[] args) {
- // 声明ticket对象
- Ticket t = new Ticket();
- Thread t1 = new Thread(t);
- Thread t2 = new Thread(t);
- Thread t3 = new Thread(t);
- Thread t4 = new Thread(t);
- // 启动线程
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
- class Ticket implements Runnable {
- private int ticket = 10000;
- // 声明对象为sychronized提供锁
- Object obj = new Object();
- // 复写run方法
- public void run() {
- // 多次循环,用while
- while (true) {
- synchronized (obj) {
- if (ticket > 0) {
- try {
- Thread.sleep(5);
- } catch (Exception e) {
- }
- System.out.println(Thread.currentThread().getName()
- + "....卖票 : " + ticket--);
- }
- }
- }
- }
- }
复制代码 |