java中如何解决线程不安全的问题呢?
2017-04-12 12:54
405 查看
当我们仔细研究会发现,当几个线程访问共同的变量,如果此变量可被改,由于线程的执行顺序和速度由jvm的优化决定,我们不可控,所以结果也是不确定,就造成了线程的不安全。马克-to-win:如何解决线程不安全的问题呢?答案:1)如果几个线程必须要改某个共同的变量,我们就加synchronized,
下节我们就讲。2)同样完成用户的需求,但是让几个线程避开使用共同的变量。也就谈不上更改共同的变量了。下面的例子,使用了局部变量或两个不同的实例传进线程, 两个线程每次只卖一本书。
例:1.8.2_c-本章源码
class BookMark_to_win {
void onlySellOne() {
int bookNum=10;
while (bookNum > 0) {
System.out.println(Thread.currentThread().getName()
+ " before" + bookNum);
bookNum--;
try {
Thread.sleep(1000);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()
+ " after " + bookNum);
}
}
}
class MyThread extends Thread {
BookMark_to_win book;
MyThread(BookMark_to_win tmp) {
this.book = tmp;
}
public void run() {
book.onlySellOne();
}
}
public class Test {
public static void main(String[] args) {
BookMark_to_win bookM = new BookMark_to_win();。。。。。。。。。。。。。。。。。
详情请进:http://www.mark-to-win.com/JavaBeginner/JavaBeginner6_web.html#HowToSolveThreadNonSafe
下节我们就讲。2)同样完成用户的需求,但是让几个线程避开使用共同的变量。也就谈不上更改共同的变量了。下面的例子,使用了局部变量或两个不同的实例传进线程, 两个线程每次只卖一本书。
例:1.8.2_c-本章源码
class BookMark_to_win {
void onlySellOne() {
int bookNum=10;
while (bookNum > 0) {
System.out.println(Thread.currentThread().getName()
+ " before" + bookNum);
bookNum--;
try {
Thread.sleep(1000);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName()
+ " after " + bookNum);
}
}
}
class MyThread extends Thread {
BookMark_to_win book;
MyThread(BookMark_to_win tmp) {
this.book = tmp;
}
public void run() {
book.onlySellOne();
}
}
public class Test {
public static void main(String[] args) {
BookMark_to_win bookM = new BookMark_to_win();。。。。。。。。。。。。。。。。。
详情请进:http://www.mark-to-win.com/JavaBeginner/JavaBeginner6_web.html#HowToSolveThreadNonSafe
相关文章推荐
- java中同步synchronized的意义,如何用它解决线程不安全的问题
- 黑马程序员-(多线程)了解线程与如何解决线程同步到来的安全问题!(面试)
- 如何解决 Java 安全问题?
- 完美解决Java中的线程安全问题
- 如何解决 Java 安全问题?
- java通过代码控制线程状态,解决线程不安全的问题。
- java解决线程不安全问题的方法
- Java SimpleDateFormat 线程不安全问题及解决方法
- java 多线程(线程间通信-解决安全问题)
- Java线程—如何解决Swing的单线程问题-----------Swing线程机制
- Java线程安全问题及线程安全解决方法
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- 浅谈利用同步机制解决Java中的线程安全问题
- 如何解决java线程中的资源共享的问题
- 如何解决Java线程同步中的阻塞问题
- java线程安全之synchronized同步代码块解决脏读问题(四)
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- 一个简单的Java对象池实现——可用来解决SimpleDateFormat的线程安全问题
- 如何解决 Java 安全问题?
- java多线程的等待唤醒机制及如何解决同步过程中的安全问题