96SEO 2026-02-20 05:53 26
Consumer(phone);p.start();c.start();}

true;while(true){synchronized(phone){if(phone.isStore()){//有库存//等待//1.将当前线程记录在对象监视器中(记录当前线程进入到阻塞状态)//2.释放锁资源(解锁)//3.当前线程进入到阻塞状态try
{e.printStackTrace();}}if(flag){phone.setBrand(华为);phone.setPrice(3999);}else{phone.setBrand(小米);phone.setPrice(1999);}flag
!flag;phone.setStore(true);//唤醒唤醒的是对象监视器中随机一个等待的线程唤醒的线程进入到就绪态phone.notify();}}}
{while(true){synchronized(phone){if(!phone.isStore()){//没有库存try
{//等待//1.将当前线程记录在对象监视器中(记录当前线程进入到阻塞状态)//2.释放锁资源(解锁)//3.当前线程进入到阻塞状态phone.wait();}
{e.printStackTrace();}}System.out.println(phone.getBrand()
phone.getPrice());phone.setStore(false);//唤醒唤醒的是对象监视器中随机一个等待的线程唤醒的线程进入到就绪态phone.notify();}}}
1.多个线程(生产者线程、消费者线程)操作同一个资源(产品类的对象)*
Consumer(phone);p1.start();p2.start();c1.start();c2.start();}
true;while(true){synchronized(phone){while(phone.isStore()){//有库存//等待//1.将当前线程记录在对象监视器中(记录当前线程进入到阻塞状态)//2.释放锁资源(解锁)//3.当前线程进入到阻塞状态try
{e.printStackTrace();}}if(flag){phone.setBrand(华为);phone.setPrice(3999);}else{phone.setBrand(小米);phone.setPrice(1999);}flag
!flag;phone.setStore(true);//唤醒唤醒对象监视器中所有的线程phone.notifyAll();}}}
{while(true){synchronized(phone){while(!phone.isStore()){//没有库存try
{//等待//1.将当前线程记录在对象监视器中(记录当前线程进入到阻塞状态)//2.释放锁资源(解锁)//3.当前线程进入到阻塞状态phone.wait();}
{e.printStackTrace();}}System.out.println(phone.getBrand()
phone.getPrice());phone.setStore(false);//唤醒唤醒对象监视器中所有的线程phone.notifyAll();}}}
}区别就是只有一个生产者和消费者的时候不需要一直去判断有没有库存,因为生产了才能消费,消费了才生产
StoremaxCapacity、curCapacity、list*
Consumer(store);p.start();c.start();}
{e.printStackTrace();}}list.add(cake);curCapacity;System.out.println(入库当前库存为
curCapacity);this.notify();}//出库public
list.removeFirst();curCapacity--;System.out.println(出库当前的库存为
LocalDateTime.now().toString());store.push(cake);}}
只需把仓库类的出库入库的判断改为while循环即测试类多几个生产,消费线程,其他同上
{e.printStackTrace();}}list.add(cake);curCapacity;System.out.println(入库当前库存为
curCapacity);this.notifyAll();}//出库public
list.removeFirst();curCapacity--;System.out.println(出库当前的库存为
StoremaxCapacity、curCapacity、list*
Consumer(store);p1.start();p2.start();c1.start();c2.start();}
{System.out.println(Thread.currentThread().getName()
java.util.concurrent.ExecutorService;
java.util.concurrent.Executors;public
Executors.newSingleThreadExecutor();for
Task(i);//将任务提交给线程池pool.execute(task);}//关闭线程池pool.shutdown();}
java.util.concurrent.ExecutorService;
java.util.concurrent.Executors;public
Executors.newFixedThreadPool(3);for
Task(i);//将任务提交给线程池pool.execute(task);}//关闭线程池pool.shutdown();}
java.util.concurrent.ExecutorService;
java.util.concurrent.Executors;public
{//创建可缓存的线程池(原本线程池中没有线程有任务就创建线程60秒工作的线程任务是闲置线程就回收)ExecutorService
Executors.newCachedThreadPool();for
Task(i);//将任务提交给线程池pool.execute(task);}//关闭线程池pool.shutdown();}
java.util.concurrent.Executors;
java.util.concurrent.ScheduledExecutorService;
java.util.concurrent.TimeUnit;public
{//创建延迟任务的线程池ScheduledExecutorService
Executors.newScheduledThreadPool(3);for
Task(i);//提交任务设置延迟时间pool.schedule(task,
TimeUnit.SECONDS);}//关闭线程池pool.shutdown();}
java.util.concurrent.ArrayBlockingQueue;
java.util.concurrent.RejectedExecutionHandler;
java.util.concurrent.ThreadFactory;
java.util.concurrent.ThreadPoolExecutor;
java.util.concurrent.TimeUnit;public
num);t.setPriority(Thread.MAX_PRIORITY);num;return
{System.out.println(傻逼你提交的任务太快了~~~);}});for
Task(i);//将任务提交给线程池pool.execute(task);}//闲置时间到后会销毁核心线程的方法//注意如果连核心线程都销毁了何谈线程的复用率pool.allowCoreThreadTimeOut(true);pool.shutdown();}
{System.out.println(Thread.currentThread().getName()
java.util.concurrent.ArrayBlockingQueue;
java.util.concurrent.TimeUnit;public
Task(i);//将任务提交给线程池pool.execute(task);}pool.shutdown();}
java.util.concurrent.BlockingQueue;
java.util.concurrent.RejectedExecutionHandler;
java.util.concurrent.ThreadFactory;
java.util.concurrent.ThreadPoolExecutor;
java.util.concurrent.TimeUnit;public
MyRejectedExecutionHandler();public
myRejectedExecutionHandler);}public
RejectedExecutionHandler{Overridepublic
{System.out.println(哎呀你提交的任务太快了~~~);}}//自定义线程工程private
num);t.setPriority(Thread.MAX_PRIORITY);num;return
1.死锁不会报错程序会一直抢资源2.尽可能不要锁嵌套public
{e.printStackTrace();}synchronized
{System.out.println(哲学家1吃饭饭);}}}}).start();new
{e.printStackTrace();}synchronized
{System.out.println(哲学家2吃饭饭);}}}}).start();}
java.util.concurrent.ArrayBlockingQueue;
java.util.concurrent.ExecutionException;
com.qf.thread_pool_03.MyThreadPool;public
需求计算任务一个包含了2万个整数的数组分拆了多个线程来进行并行计算最后汇总出计算的结果。
*
ArrayBlockingQueue(30));//创建任务Task
20000);//提交任务返回Future任务的返回值就在Future里FutureInteger
pool.submit(task1);FutureInteger
pool.submit(task2);FutureInteger
pool.submit(task3);FutureInteger
pool.submit(task4);//合并计算System.out.println(future1.get()
future4.get());pool.shutdown();}
java.util.concurrent.Callable;//带有返回值的任务类
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback