编写Java程序的时候,经常会遇到线程冲突的情况,线程因为异常而中断经常导致程序无法正常运行,然而在编程时很多时候需要保证线程不会被interrupt,最普通的方式就是加锁,可以理解成线程执行的时候被锁定,外界的干扰不会对线程造成影响。
用同步的方法来确保threadsafe的,同时配合一些线程安全的ADT来保证线程安全。
类中一部分被多个线程共享的数据都是不可变的,比如String和基本数据类型,还有一部分数据是线程安全的ADT,比如容器类。在可能发生竞争条件的地方用synchronized来同步语句块,以保证线程安全。
不可变类型:
private final List<Board> list = Collections.synchronizedList(new ArrayList<>());
private boolean state = false;
private String direction = null;
private int monkeysOn = 0;
private int ID;
private int lastSpeed = 0;
用synchronized同步语句块
public void setSlowv(int slowv) {
synchronized (this) {
this.lastSpeed = slowv;
}
}
public int getID() {
synchronized (this) {
return ID;
}
}
保证线程安全的方法有很多,但是小编的方法已经足够一个初学者理解什么是线程安全了。