java-thread-5

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();

	}
}

Supongo que te gusta

Origin blog.csdn.net/huiguo_/article/details/108821477
Recomendado
Clasificación