package com.wen.thread;
/**
* @Author WangEn
* @CreateTime: 2021-04-12-11-10
* @Emile: wen_5988@163.com
*/
// 测试多线程礼让 yield()方法 当时不一定会执行,还是根据cpu的调用
public class TestYield implements Runnable {
public static void main(String[] args) {
TestYield testYield = new TestYield();
new Thread(testYield,"A").start();
Thread.yield();
new Thread(testYield,"B").start();
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"关闭---》");
System.out.println(Thread.currentThread().getName()+"打开---》");
}
}
package com.wen.thread;
/**
* @Author WangEn
* @CreateTime: 2021-04-16-20-52
* @Emile: wen_5988@163.com
*/
public class TestTick_One {
public static void main(String[] args) {
Buy buy = new Buy();
new Thread(buy,"小明").start();
new Thread(buy,"黄牛党").start();
new Thread(buy,"二明").start();
}
}
class Buy implements Runnable {
private int tickNums = 100;
boolean flag = true;
@Override
public void run() {
while (flag) {
try {
BuyTIck();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private synchronized void BuyTIck() throws InterruptedException {// 同步监视器的对象是修改的变量
if (tickNums<=0){
flag = false;
return;
}
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + "-->抢到了第" + tickNums-- + "张票");
}
}
package com.wen.thread;
/**
* @Author WangEn
* @CreateTime: 2021-04-16-21-07
* @Emile: wen_5988@163.com
*/
public class TestJieHunJiJin {
public static void main(String[] args) {
Account account = new Account("结婚基金", 100);
new JieHun(account,50,"丈夫").start();
new JieHun(account,100,"妻子").start();
}
}
// 定义账户
class Account {
public String name;
public int money;
public Account(String name, int money) {
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
// 定义人
class JieHun extends Thread {
private Account account;
private int drawingMoney;
private int nowMoney;
public JieHun(Account account, int drawingMoney, String name) {
super(name);
this.account = account;
this.drawingMoney = drawingMoney;
}
@Override
public void run() {
synchronized (account){// 同步监视器的对象是修改的变量
if (account.money - drawingMoney < 0) {
System.out.println("钱不够!!!");
return;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
account.money -= drawingMoney;
nowMoney += drawingMoney;
System.out.println(account.name + "余额为" + account.money);
System.out.println(this.getName() + "手里面的钱为" + nowMoney);
}
}
}
package com.wen.线程不安全的集合;
import java.util.ArrayList;
import java.util.List;
/**
* @Author WangEn
* @CreateTime: 2021-05-04-15-05
* @Emile: wen_5988@163.com
*/
public class UnsafeList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
new Thread(()->{
synchronized (list){// 同步监视器的对象是修改的变量
list.add(Thread.currentThread().getName());
}
}).start();
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(list.size());
}
}
原文:https://www.cnblogs.com/WangEn/p/14729604.html