文章列表
public class StreamDemo { public static void main(String[] args) { List<Student> list = new ArrayList<>(); list.add(new Student("C
public class BlockQueueDemo { public static void main(String[] args) throws InterruptedException { //addRemoveTest(); offerPollDemo();
读写锁 使用 public class ReadWriteLockDemo { public static void main(String[] args) { MapCatch mapCatch = new MapCatch(); for (int i =
CountDownLatch,CyclicBarrier,Semaphore CountDownLatch 的await可以阻塞一个线程,等待全部countdown完毕,则跳过wait CyclicBarrier 阻塞多个线程,执行完毕后返回自身runnable Semaphore 信号量通过信号量
Callable callable拥有返回值得runnable,可以通过FutureTask来进行包装 public class CallableDemo { public static void main(String[] args) throws ExecutionException,
队列安全操作 我们都知道 Arraylist,add操作时不安全的,没有加锁 1.使用 Vector,里面的操作是加了锁的 2.使用Collections.synchronizedList() ,他里面的操作也是加了锁的,类似装饰者,给需要同步的操作加锁,迭代器没有做同步,Vector的迭代器做了同
synchronized 与 Lock锁 lock是synchronized的升级版 wait 时记得使用while判断,以免虚假唤醒 其中lock需要手动释放 lock的等待唤醒对应 await(),single() lock可以设置公平锁 可以拥有多个condition去await和single
线程状态 public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread.
线程池的使用 线程并发时加锁,一般需要锁住被修改的变量 线程池使用案列: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
多线程注意点 Thread.sleep() 1.不对释放对象锁 2.线程异常时抛中断异常 Thread.yield() 1.重新调度CPU,CPU有一半的概率还是调度自己 Thread.join() 自己线程执行了其他线程的join方法,让join的线程先走 setPriority()设置优先级,默
这就是我
文章
分类
访问量
建站天数
标签目录
最近评论