当前位置: 首页 > news >正文

网站建设上qq图标去除网页设计制作课程表

网站建设上qq图标去除,网页设计制作课程表,如何做好网站建设销售,ps网站如何做烫金的文字一、死锁 1.概述 死锁 : 死锁是指两个或两个以上的进程在执行过程中#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象#xff0c;若无外力作用#xff0c;它们都将无法往下执行。此时称系统处于死锁状态或系统产生了死锁#xff0c;这些永远在互相等待的进…一、死锁 1.概述 死锁 : 死锁是指两个或两个以上的进程在执行过程中由于竞争资源或者由于彼此通信而造成的一种阻塞的现象若无外力作用它们都将无法往下执行。此时称系统处于死锁状态或系统产生了死锁这些永远在互相等待的进程称为死锁进程原理 : 某个线程执行完成,需要先后嵌套锁定两个对象,在这个过程中,先锁定了第一个对象另一个线程执行完成也需要先后嵌套锁定两个对象,在这个过程中,先锁定了第二个对象第一个线程执行中,要执行到第二个对象的时候,发现第二个对象被锁定,进入等待状态,等待交出锁第二个线程执行中,要执行到第一个对象的时候,发现第一个对象也被锁定,也进入等待状态此时两个线程都在等待对方交出锁,导致死锁 2.代码实现 public class Thread_01_DeadLock {public static void main(String[] args) {Object o1new Object();Object o2new Object();Thread t1new Thread(new T1(o1, o2));Thread t2new Thread(new T2(o1, o2));t1.start();t2.start();} } class T1 implements Runnable{Object o1;Object o2;public T1(Object o1,Object o2){this.o1o1;this.o2o2;}Overridepublic void run() {synchronized (o1) { // try {//加上睡眠一定死锁 // Thread.sleep(1000); // } catch (InterruptedException e) { // e.printStackTrace(); // }System.out.println(Thread.currentThread().getName()--T1o1已锁定);synchronized (o2) {System.out.println(Thread.currentThread().getName()--T1o2已锁定);}}System.out.println(t1执行完成);} } class T2 implements Runnable{Object o1;Object o2;public T2(Object o1,Object o2){this.o1o1;this.o2o2;}Overridepublic void run() {try {//加上睡眠一定不死锁Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o2) {System.out.println(Thread.currentThread().getName()--T2o2已锁定);synchronized (o1) {System.out.println(Thread.currentThread().getName()--T2o1已锁定);}}System.out.println(t2执行完成);} }二、线程通信 1.概述 Object中的方法wait : 让当前线程进入等待状态(挂起),并释放锁,当被唤醒之后,接着挂起的位置继续执行,假如之前执行了1、2到3挂起那么被唤醒后接着执行3notify : 唤醒一个在该对象中挂起的任意一个线程notifyAll : 唤醒在该对象中挂起的所有线程这几个方法必须出现在加锁的成员方法中wait : 如果是无参,则不会自动醒,也可以传入long类型的值,代表毫秒数,多久之后自动醒wait 和 sleep的区别 : sleep : 让当前线程进入睡眠状态, 是静态方法,和是否加锁没有关系,如果在加锁的方法中,也不会释放锁wait : 让当前线程进入挂起等待状态,必须在加锁的成员方法中,另外会释放锁 2.使用方式 public class Thread_03_Wait {public static void main(String[] args) throws InterruptedException {Num numnew Num();Thread t1new PrintNum(num);Thread t2new PrintNum(num);t1.start();Thread.sleep(10);//保证t1先执行t2.start();} } class PrintNum extends Thread{Num num;public PrintNum(Num num){this.numnum;}Overridepublic void run() {while (true) {num.printNums();}} } class Num{private int count 1;public synchronized void printNums(){System.out.println(Thread.currentThread().getName()--count);count;// 唤醒等待的进程this.notifyAll();try {Thread.sleep(1000);// 进入挂起状态并释放锁this.wait();} catch (InterruptedException e) {e.printStackTrace();}} }3.生产者消费者 3.1.示例 public class Thread_04_Producer {public static void main(String[] args) {SynStack ssnew SynStack();Thread producer1new Thread(new Producer(ss));Thread producer2new Thread(new Producer(ss));Thread consumer1new Thread(new Consumer(ss));Thread consumer2new Thread(new Consumer(ss));producer1.start();producer2.start();consumer1.start();consumer2.start();} } class Producer implements Runnable{private SynStack ss;public Producer(SynStack ss){this.ssss;}Overridepublic void run() {for (int i 0; i 26; i) {ss.push((char)(ai));}} } class Consumer implements Runnable{private SynStack ss;public Consumer(SynStack ss){this.ssss;}Overridepublic void run() {for (int i 0; i 26; i) {ss.pop();try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}} } //业务类 class SynStack{int count0;// 货物数量char[] datanew char[6];// 记录货物数量// 生产货物public synchronized void push(char ch){// 判断货物满没满while(count data.length){//try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//仓库空了该生产了此时应该唤醒挂起的消费者if (count0) {this.notifyAll();}data[count]ch;System.out.println(Thread.currentThread().getName()生产了 ch 还剩 count 个货物);}// 消费货物public synchronized char pop(){// 判断货物空没空while(count 0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//仓库满了该挂起了此时应该唤醒挂起的生产者if (countdata.length) {this.notifyAll();}char chdata[--count];System.out.println(Thread.currentThread().getName()消费了 ch 还剩 count 个货物);return ch;} }三、单例模式 public class SingLeton {private SingLeton(){}// volatile 防止指令重排private volatile static SingLeton singLeton;public static SingLeton getInstance(){// 多线程可能同时进入if (singLetonnull) {// 一个线程进入synchronized (SingLeton.class) {if (singLetonnull) {// 一个线程进入后 对象就不再是null其他的线程将无法进入singLetonnew SingLeton();} }}return singLeton;} }四、线程池 线程池的作用 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况可以自动或手动设置线程数量达到运行的最佳效果少了浪费了系统资源多了造成系统拥挤效率不高。用线程池控制线程数量其他线程排队等候。一个任务执行完毕再从队列的中取最前面的任务开始执行。若队列中没有等待进程线程池的这一资源处于等待。当一个新任务需要运行时如果线程池中有等待的工作线程就可以开始运行了否则进入等待队列。为什么要用线程池: 减少了创建和销毁线程的次数每个工作线程都可以被重复利用可执行多个任务。可以根据系统的承受能力调整线程池中工作线线程的数目防止因为消耗过多的内存而把服务器累趴下(每个线程需要大约1MB内存线程开的越多消耗的内存也就越大最后死机)
http://www.hkea.cn/news/14541200/

相关文章:

  • 昆明seo公司网站看一个网站是用什么语言做的
  • 网站开发软件技术开发公司工程造价信息网官网登录入口
  • 重庆h5网站建设模板网站后台 js框架
  • 网页设计做军事网站的感想昆山推广用什么网站比较好
  • 做教育网站挣钱建筑网站带图解
  • 怎么在家做网站工业设计本科生作品集
  • 建网站 pdfwordpress 跳板
  • 摄影作品欣赏网站wordpress菜单显示在哪
  • 泰安微信网站制作农村房屋设计图
  • 中国平面设计和网站建设企业seo顾问服务阿亮
  • 做网站时管理员权限的页面精美ppt模板下载免费
  • 云南公司网站开发如何修改网站源文件
  • 上海网站建设费用多少旅游网站建设的目的与意义是什么意思
  • 商城网站制作报价a5wordpress模板
  • 国家城乡住房建设厅网站建设网站建设安全培训平台
  • 人人站cms软件技术和软件工程的区别
  • 制作一个网站的流程有哪些网站开发价格对比
  • 北京云建站模板童程童美少儿编程怎样收费
  • 怎么向google提交网站微信朋友圈广告投放代理
  • 宁波北仑做网站做动画 的 网站有哪些
  • 常州公司网站模板建站福建设备公司网站
  • seo公司哪家好用白云怎样优化网站建设
  • 学校网站模板 dedecms青岛建设银行银行招聘网站
  • 福建网站建设公wordpress移动
  • 网站创建怎么做游戏源码搭建
  • 免费毕业设计网站建设wordpress按钮灯箱
  • 无锡市锡山区建设局网站做安利能开个人网站
  • 专门做外国的网站有哪些以域名做网站关键词
  • 黑龙江建设厅网站官网seo算法是什么
  • 网络营销与传统营销的关系外贸网站推广优化