知识点:简单的异常处理,多线程,同步代码块

来源:互联网 发布:初中教育状况网络调研 编辑:程序博客网 时间:2024/05/16 19:21

这里先写简单的异常处理,后面的代码会有更为复杂的。多线程与同步代码块也会有升级版。

/**
 * 异常处理(老师用电脑)
 * @author Administrator
 *
 */
class Teacher {
 private String name;
 public Computer computer;
 
 Teacher(String name){
  this.name = name;
  this.computer = new Computer();
 }
 
 void talk() throws Keshi{
  try {
   computer.use();
  }
  catch(LanPing e) {
   computer.reset();
  }
  catch(MaoYan e) {
   System.out.println("课时无法完成"+e.toString());
   throw new Keshi("课时无法完成");
  }
  
 }
}

class Computer {
 private int state = 3;//正常情况为1
 
 Computer() {
  System.out.println("电脑运行了");
 }
 
 void use() throws LanPing,MaoYan{
  if(state == 2) {
   throw new LanPing("蓝屏了");
  }
  if(state == 3) {
   throw new MaoYan("冒烟了");
  }
 }
 
 void reset(){
  System.out.println("电脑重启了");
 }
}

class LanPing extends Exception {
 LanPing(String str){
  super(str);
 }
}

class MaoYan extends Exception {
 MaoYan(String str){
  super(str);
 }
}

class Keshi extends Exception {
 private String str;
 Keshi(String str){
  super(str);
 }
}
public class Text4 {
 public static void main(String args[]) {
  Teacher t = new Teacher("何老师");
  try{
   t.talk();
  }
  catch(Keshi e){
   System.out.println("换老师");
  }
 }

}

思考与感悟:这里其实主要的知识点是,把调用方识别的异常抛出去。其实我也没感觉说对方不认识的异常抛出去就会怎么样。我觉得可能就是一种思想吧。但我没发现必要性。

 

/**
 * 多线程实现同步 卖票系统
 * @author Administrator
 *
 */
class Ticket implements Runnable{
 public int ticket = 100;
 public Object obj = new Object();
 public void run() {
  while(true) {
   synchronized(obj) { //同步代码块,用obj对象里的标志位来只让一个线程执行代码块
    if(ticket > 0) {
     try{Thread.sleep(10);}catch(Exception e) {}
     System.out.println(Thread.currentThread().getName()+ticket--);
    }
   }
  }
 }
 
 public synchronized void show() {//用this作为标志
  if(ticket > 0) {
   try{Thread.sleep(10);}catch(Exception e) {}
   System.out.println(Thread.currentThread().getName()+ticket--);
  }
 }
}
public class Text5 {
 public static void main(String args[]) {
  Ticket t = new Ticket();
  Thread t1 = new Thread(t);
  Thread t2 = new Thread(t);
  
  t1.start();
  t2.start();
 }

}

思考与感悟:

多线程之前自己有自学过,但没有老师讲得这么透。

多线程就是公用资源很容易出错。在利用到公用资源的代码的前面加同步synchronized关键字就OK了。当然不能在run方法前面加同步标示。线程运行的就是run方法,如果每个run方法每次只能执行一个线程,那不就变成单线程了。就是这关键字synchronized不好记。

还有就是同步代码块的标示,我们需要用一个标示来分辨这个段同步代码是否是空闲的。就用约定俗成的this就好了,因为方便。其实用其他对象也是可以的。只是有时候为了一个标示还要另外new 一个对象真的好浪费啊。

 

0 0
原创粉丝点击