知识点:简单的异常处理,多线程,同步代码块
来源:互联网 发布:初中教育状况网络调研 编辑:程序博客网 时间: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 一个对象真的好浪费啊。
- 知识点:简单的异常处理,多线程,同步代码块
- 多线程 同步代码块
- 多线程、同步代码块
- 多线程-同步代码块
- AdaultBird--我的黑马程序员之路!Chapter2---异常体系,多线程,同步代码块和同步函数,死锁
- Java多线程-线程的同步(同步代码块)
- Java多线程-线程的同步(同步代码块)
- 验证同步代码块与同步函数的锁【多线程】
- Java多线程-线程的同步(同步代码块)
- 多线程(四)线程的同步之同步代码块
- Java多线程-线程的同步(同步代码块)
- 验证同步代码块与同步函数的锁【多线程】
- 多线程---java同步方法和同步代码块的区别
- 多线程三(同步代码块)
- 多线程安全问题----同步代码块
- 多线程_同步代码块的方式解决线程安全问题
- 多线程_同步代码块解决线程安全问题的解释
- java多线程五:同步代码块
- 【NOIP 2009】Hankson的趣味题 分析&渣程序(增补对于大质数的分析)
- POJ - 1061 青蛙的约会 (扩展欧几里得算法)
- java
- 一个二进制算法
- 给大家讲个笑话吧
- 知识点:简单的异常处理,多线程,同步代码块
- disksim与ssd扩展模块小结
- Lucene 工具类
- BadUSB的防范研究
- [HDOJ 4894] Mart Master [树形DP]
- web应用程序
- SPOJ 5971 LCM Sum 欧拉函数 (或 莫比乌斯反演?)
- Android内容提供者的实现
- php语言