JUC类型是一个线程安全类型
其中需要使用synchronized关键字实现的类 此刻并不需要
CopyOnWriteArrayList --》线程安全的列
package Thread.JUC;
import java.util.concurrent.*;
//JUC包属于并发包 多个
public class TestJUC {
public static void main(String[] args) throws InterruptedException {
//创建一个线程安全的List
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList();
for (int i = 0; i < 10000; i++) {
new Thread(()->{list.add(Thread.currentThread().getName());}).start();
}
Thread.sleep(1000);
System.out.println(list.size());
}
}
相当于synchronized的锁 Lock
需要记住的一些东西 锁需要设置在全局 局部的锁 并不能够实现锁定对象的效果
就是可以在全局创建一个 ReentrantLock 后续对于对象的锁就是设置而已
package Thread.JUC;
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock;
public class TestLock {
public static void main(String[] args) {
buyTicket k = new buyTicket();
new Thread(k,"小明").start();
new Thread(k,"小红").start();
new Thread(k,"小杠").start();
}
}
class buyTicket implements Runnable
{
int tickNum = 10;
boolean flag = true;
private final ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while(true){
lock.lock();
if(tickNum<=0){
break;
}
else {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"买到了第"+tickNum--+"张票");
try {
Thread.sleep(400);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lock.unlock();
}
}
}