package Thread_main;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* java 的礼让 .yield()这里的礼让,有可能没有礼让,了解一下就好
*
* java的优先级 一共有10个级别1-10优先级越高,它就越优先执行默认是5,比如说main函数的优先级就是5
* 当在同一个优先级的时候,按照先来先执行的顺序,进行执行
*
* 1.语法:设置优先级 .setPriortity(int newPriority);
* //这种优先级是理论上的!但是实际不太明显
* 就是当cpu正在执行其他的线程,当来更高的优先级线程时候,cpu不会停下来,运行当前的线程
*
*
*
*
*重点:线程的同步(锁)
*解释:线程同时调用一个函数的时候,会产生冲突,有可能产生脏数据的可能
*关键字:synchronized Lock
*语法:
*1.同步方法: synchronized void method{}
*2.同步代码块:synchronized(object){}
*object为任意的对象,仅作为加锁的对象
*3.Lock lock = new ReentrantLock();
*这里要在一个公共的对象里面锁
* @author 小虎牙
*
*/
public class Thread_5 extends Thread {
int money = 10;
Lock lock = new ReentrantLock();
public static void main(String[] args) {
Thread_5 Dome = new Thread_5();
for (int i = 0; i < 2; i++) {
Thread t1 = new Thread(Dome);
Thread t2 = new Thread(Dome);
Thread t3 = new Thread(Dome);
Thread t4 = new Thread(Dome);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
@Override
// 第一种方法 public synchronized void run() {
public void run() {
// TODO 自动生成的方法存根
// super.run();
// 第二种方法,object推荐使用this
// synchronized (this) {
// while (true) {
// if (money > 0) {
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// // TODO 自动生成的 catch 块
// e.printStackTrace();
// }
// System.out.println("还剩余的" + (money--) + "元");
// }
// else {
// break;
// }
// }
// }
// 第三种方法Lock
lock.lock();
while (true) {
if (money > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("还剩余的" + (money--) + "元");
} else {
break;
}
}
lock.unlock();
}
}