摘要:
1 package day2_4; 2 3 /** 4 * 使用同步方法解决继承Thread类的线程安全问题 5 * 6 * <p> 7 * 如果操作共享数据的代码完整的声明在一个方法中,在方法定义上,用synchronized修饰,即同步方法 8 * 9 * 关于同步方法的总结: 10 * 1.同 阅读全文
摘要:
1 package day2_4; 2 3 /** 4 * 使用同步方法解决实现Runnbale接口的线程安全问题 5 * 6 * <p> 7 * 如果操作共享数据的代码完整的声明在一个方法中,在方法定义上,用synchronized修饰,即同步方法 8 * 9 * 关于同步方法的总结: 10 * 阅读全文
摘要:
1 package day2_4; 2 3 /** 4 *例子:创建三个窗口卖票,总票数为100张,使用实现Runnable接口 5 * 1.问题:卖票过程中,出现了重票、错票的情况 >出现了线程安全问题 6 * 2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操 阅读全文
摘要:
1 package day2_4; 2 3 /** 4 *例子:创建三个窗口卖票,总票数为100张,使用实现Runnable接口 5 * 1.问题:卖票过程中,出现了重票、错票的情况 >出现了线程安全问题 6 * 2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操 阅读全文
摘要:
1 package day2_4; 2 3 /** 4 * 例子:创建三个窗口卖票,总票数为100张,使用实现Runnable接口 5 * 因为三个线程是共享Window2对象的,所以也是共享ticket变量的,自然就不用static修饰 ticket了 6 * 仍存在线程安全问题,待解决(还是会有 阅读全文
摘要:
1 package day2_4; 2 3 /** 4 * 例子:创建三个窗口卖票,总票数为100张,使用继承Thread的方式 5 * 因为没有线程对象都有自己的ticket,所以每个窗口都卖100张票 6 * 解决方法时将ticket改为 static,但仍然有问题:执行过程中都会卖相同号的票 阅读全文
摘要:
1 package day2_3; 2 3 /** 4 * 测试Thread中的常用方法 5 * 1.start() 启动当前线程,调用当前线程的run() 6 * 2.run() 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中 7 * 3.currentThread( 阅读全文
摘要:
1 package day2_4; 2 3 /** 4 * 创建线程的方式二:实现Runnable接口 5 * 1.实现Runnable接口,并实现其抽象方法run() 6 * 2.创建这个实现类的对象 7 * 3.将这个是实现类对象作为参数传递到Thread类的构造器中,并创建Thread类的对象 阅读全文
摘要:
1 package day2_3; 2 3 /** 4 * 多线程的创建,方式一:继承与Thread类 5 * 1.创建一个继承于Thread类的子类 6 * 2.重写Thread类的run() >将此线程执行的操作声明在run()方法中 7 * 3.创建子类对象 8 * 4.通过子类对象调用sta 阅读全文