1 .
* 使用同步代码块
* 1 确定要被同步的代码
* 2 用同步代码块 将要被同步的代码进行同步
* synchronized(object){
* 被同步的代码
* }
2 .锁的对象必须是唯一的 ,多个线程 公用一把锁,如果是多把锁, 就相当于没加锁,资源类只能创建一个对象, 可以利用资源类对象 this
3 .
package com.qf.demo;
public class Test {
public static void main(String[] args) {
Window window = new Window();
Thread thread = new Thread(window,"二狗");
Thread thread2 = new Thread(window,"三狗");
Thread thread3 = new Thread(window,"四狗");
Thread thread4 = new Thread(window,"五狗");
thread.start();
thread2.start();
thread3.start();
thread4.start();
}
}
/**
* 使用同步代码块
* 1 确定要被同步的代码
* 2 用同步代码块 将要被同步的代码进行同步
* synchronized(object){
* 被同步的代码
* }
* @author Administrator
*
*/
class Window implements Runnable{
int ticket= 100;
//Window object = new Window();// 锁的对象必须是唯一的 多个线程 公用一把锁
// 如果是多把锁, 就相当于没加锁
// 资源类 只能创建一个对象, 可以利用资源类对象 this
public void run() {
while(true){
synchronized (this) {// 锁是object 任意类型的 任意锁, 互斥锁
if(ticket>0){
ticket--;
try {
Thread.sleep(1000);// 会释放cpu , 但是没有释放锁资源
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖了1张票,还剩"+ticket);
}else{
break;
}
}
}
}
}