线程同步机制 Synchronized
1.在多线程编程,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何同一时刻,最多有一个线程访问,以保证数据的完整性。
2.简单粗暴的解释就是:一个一个来。
试题
1.售票问题
class sell extends Thread{
int sum = 100;
boolean loop =true;
public synchronized void sellTicket01() throws InterruptedException {
if (sum <= 0){
System.out.println("停止售票");
loop =false;
return;
}
sleep(50);
System.out.println("窗口 "+Thread.currentThread().getName() + "销售出一张票"
+" 剩余票数:"+(--sum));
}
@Override
public void run() {
while (loop){
try {
sellTicket01();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2.两个人取钱
package 取钱;
/**
* @author 阳明晖
*/
@SuppressWarnings("all")
public class dome {
public static void main(String[] args) {
T t = new T();
Thread thread1 = new Thread(t);
thread1.setName("李明");
Thread thread2 = new Thread(t);
thread2.setName("红红");
thread1.start();
thread2.start();
}
}
class T implements Runnable{
int money = 10000;
@Override
public synchronized void run() {
while (true) {
// synchronized (this) { //加锁,this代表T 写在这里最佳,但也能写在上面的类名前!!
if (money < 1000) {
System.out.println("余额不足!");
break;
}
money -= 1000;
System.out.println(Thread.currentThread().getName() + "取出来1000元,还剩:" + (money));
// }
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
希望能帮助开始学线程的小伙伴们!