随笔分类 - 多线程
摘要:使用线程池 背景:经常创建和销毁,使用量特别大的资源,比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁,实现重复利用。 好处 提高响应速度(减少创建新线程的时间) 降低资源消耗(重复利用线程池中线程,不需要每次都创建)
阅读全文
摘要:线程协作 除了锁以外,有时候还需要相互通行,并发协作模型如生产者消费者模型 第一种解决方式:管程法 生产者将生产好的数据放入缓冲区,消费者从缓冲区拿出数据 package gaoji; //测试生产者消费者模型-->利用缓冲区解决:管程法 //生产者,消费者,产品,缓冲区 public class
阅读全文
摘要:Lock锁 java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象 ReentrantLock(可重入锁)类实现了Lock,它拥有与sy
阅读全文
摘要:死锁 多个线程各自占有一些共享资源,并且相互等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。 package thread; //死锁:多个线程相互抱着对方所需要的资源,然后形成僵
阅读全文
摘要:CopyOnWriteArrayList CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器" https://www.cn
阅读全文
摘要:线程同步 多个线程操作同一个资源 并发:同一个对象被多个线程同时操作 形成条件:队列+锁 三大不安全案例 package syn; //不安全的买票 public class UnSafeBuyTicket { public static void main(String[] args) { Buy
阅读全文
摘要:守护线程 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 //测试守护线程 //上帝守护你 public class TestDaemon { public static void main(String[] args) { God god = new G
阅读全文
摘要:线程优先级 线程的优先级用数字表示,范围从1~10: Thread.MIN_PRIORITY =1; Thread.MAX_PRIORITY = 10; Thread.NORM_PRIORITY = 5; 通过getPriority()和setPriority()方法控制 //测试线程的优先级 pu
阅读全文
摘要:观测线程状态 下面这段是帮助文档复制的 线程状态。线程可以处于以下状态之一: NEW 尚未启动的线程处于此状态。 RUNNABLE 在Java虚拟机中执行的线程处于此状态。 BLOCKED 被阻塞等待监视器锁定的线程处于此状态。 WAITING 正在等待另一个线程执行特定动作的线程处于此状态。 TI
阅读全文
摘要:线程强制执行 join Join合并线程,待此线程执行完成后,在执行其他线程,其他线程阻塞 //测试join方法,想象成插队 public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0
阅读全文
摘要:线程状态 //测试stop //1.建议线程正常停止 >利用次数,不建议死循环 //2.建议使用标志位 >设置一个标志位 //3.不要使用stop或者destroy等过时或者JDK不建议使用的方法 public class TestStop implements Runnable{ //1.设置一个
阅读全文
摘要:Lamda表达式 避免匿名内部类定义过多 其实质属于函数式编程的概念 函数式接口的定义 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口 对于函数式接口,我们可以通过lambda表达式来创建该接口对象 /* * 推导lambda表达式 * */ public class TestLam
阅读全文
摘要:静态代理 public class StaticProxy { //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 //好处: //代理对象可以做很多真实对象做不了的事情 //真实对象专注做自己的事情 public static void main(String[] args) {
阅读全文
摘要:初始并发问题 public class TestThread implements Runnable{ //多个线程同时操作同一个对象 //总数 private int ticketNums = 10; @Override public void run() { while (true){ if (
阅读全文
摘要:第二种创建线程方法,实现runnable接口 定义MyRunnable 类实现Runnable 接口 实现run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 public class MyRunnable implements Runnable { @Override pu
阅读全文
摘要:网图下载 导入commons-io包 import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; //联系Thread,实现多线程同步下载图
阅读全文
摘要:线程,进程 Process进程 Thread线程 进程是执行程序的一次执行过程,是系统分配资源的单位,一个进程可以有多个线程,至少有一个线程 第一种方法:继承Thread类 public class TestThread1 extends Thread{ @Override public void
阅读全文

浙公网安备 33010602011771号