Java SE -- 多线程 线程安全问题解决
2009-12-03 21:54
405 查看
package thread;
class ThreadTest3 implements Runnable{
private int tickets=100;
String str=new String("");
public void run() {
if(str.equals("method")){
while(true){
sale();
}
}else{
while(true){
synchronized(this){
if(tickets>0){
try{
Thread.sleep(10);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("TEST "+Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
// System.out.println("TEST "+Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
}
}
}
public synchronized void sale() {
if(tickets>0){
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
// System.out.println(Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
}
public class ThreadDemo6 {
public static void main(String[] args) {
ThreadTest3 t3=new ThreadTest3();
new Thread(t3).start();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
t3.str=new String("method");
new Thread(t3).start();
}
}
class ThreadTest3 implements Runnable{
private int tickets=100;
String str=new String("");
public void run() {
if(str.equals("method")){
while(true){
sale();
}
}else{
while(true){
synchronized(this){
if(tickets>0){
try{
Thread.sleep(10);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("TEST "+Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
// System.out.println("TEST "+Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
}
}
}
public synchronized void sale() {
if(tickets>0){
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
// System.out.println(Thread.currentThread().getName()+" is saling ticket "+ tickets--);
}
}
public class ThreadDemo6 {
public static void main(String[] args) {
ThreadTest3 t3=new ThreadTest3();
new Thread(t3).start();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
t3.str=new String("method");
new Thread(t3).start();
}
}
相关文章推荐
- 关于多线程在简单的懒汉模式下线程安全问题的解决
- 多线程-线程安全问题的产生原因分析以及同步代码块的方式解决线程安全问题
- 多线程-02,线程安全问题解决
- 多线程_生产者消费者题代码2并解决线程安全问题
- 用线程安全随机数解决Random在多线程中随机性重复的问题
- Spring-利用ThreadLocal解决线程安全问题(多线程并发登录)
- 23 API-多线程(多线程概述,多线程实现方案,线程控制常见方法,线程安全问题及解决)
- 多线程_同步代码块的方式解决线程安全问题
- 多线程-同步代码块解决线程安全问题的解释以及同步的特点及好处和弊端
- 多线程-生产者消费者问题代码2并解决线程安全问题
- 【我的Java笔记】多线程_使用Lock锁对象解决线程安全问题
- 多线程_同步代码块解决线程安全问题的解释
- java语言基础(91)——多线程(同步方法解决线程安全问题)
- java-ThreadLocal是解决线程安全问题
- 黄聪:C#多线程教程(1):BeginInvoke和EndInvoke方法,解决主线程延时Thread.sleep柱塞问题(转)
- 解决Lucene的多线程并发问题
- java socket多线程通讯,解决read阻塞问题
- 完美解决单例设计模式中懒汉式线程安全的问题
- java 解决simpledateformat线程安全问题
- 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决思路详解