标签:java多线程死锁 后台线程 线程优先级 同步死锁 java线程应用
实例:
package thread.deadlock;
/**
* 创建DeadlockDemo类:用于测试死锁
* @author 学霸联盟 - 赵灿
*/
public class DeadlockDemo {
public static void main(String[] args) {
//创建一个Shop对象
Shop shop = new Shop();
//创建两个线程对象
ThreadBuy tBuy = new ThreadBuy(shop);
ThreadSell tSell = new ThreadSell(shop);
tBuy.start();
tSell.start();
}
}
/**
* 创建Cargo(货物)类:仅仅为了创建对象,获取对象锁
* @author 学霸联盟 - 赵灿
*/
class Cargo{ }
/**
* 创建Money(货物)类:仅仅为了创建对象,获取对象锁
* @author 学霸联盟 - 赵灿
*/
class Money{ }
/**
* 创建Shop(商店)类
* @author 学霸联盟 - 赵灿
*/
class Shop {
//创建Cargo对象
private Cargo cargo = new Cargo();
//创建Money对象
private Money money = new Money();
//buyer方法完成买家想要的功能
public void buyer() {
//买家手里拿着钱,对应到代码上就是获得money对象的锁
synchronized (money) {
System.out.println("买家拿着钱说:先交货");
try {
//模拟等待卖家交货的时间
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//买家拿着钱的同时想要把货也拿到手里,再交出钱
synchronized (cargo) {
System.out.println("买家:成交");
}
}
}
//seller方法完成卖家想要的功能
public void seller() {
//卖家手里拿着货,对应到代码上就是获得cargo对象的锁
synchronized (cargo) {
System.out.println("卖家拿着货说:先交钱");
try {
//模拟等待买家交钱的时间
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//卖家拿着货的同时想要把钱也拿到手里,再交出货
synchronized (money) {
System.out.println("买家:成交");
}
}
}
}
/**
* 创建ThreadBuy类
* @author 学霸联盟 - 赵灿
*/
class ThreadBuy extends Thread{
private Shop shop;
public ThreadBuy(Shop shop){
this.shop = shop;
}
@Override
public void run() {
//购买的线程,执行购买的方法
shop.buyer();
}
}
/**
* 创建ThreadSell类
* @author 学霸联盟 - 赵灿
*/
class ThreadSell extends Thread{
private Shop shop;
public ThreadSell(Shop shop){
this.shop = shop;
}
@Override
public void run() {
//卖出的线程,执行卖出的方法
shop.seller();
}
}
运行结果:
卖家拿着货说:先交钱
买家拿着钱说:先交货死锁导致交易永远无法达成实例:
package thread.priority;
/**
* 创建父线程
* @author 学霸联盟 - 赵灿
*/
public class FatherThread extends Thread {
// 声明一个无参数的构造方法
public FatherThread() {
// 设置当前类对象的优先级为8
this.setPriority(8);
}
}
package thread.priority;
/**
* 创建子线程
* @author 学霸联盟 - 赵灿
*/
public class SonThread extends FatherThread {
public static void main(String[] args) {
// 创建SonThread对象,并使用创建的对象调用start方法启动线程
new SonThread().start();
}
@Override
public void run() {
/*
* 使用关键字this调用getPriority方法,获取当前线程的优先级
* 并通过输出语句System.out.println将获取到的优先级输出
*/
System.out.println("子线程的优先级:" + this.getPriority());
}
}
运行结果:
子线程的优先级:8版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:java多线程死锁 后台线程 线程优先级 同步死锁 java线程应用
原文地址:http://blog.csdn.net/ixueba/article/details/47611543