线程高级篇(一):多线程任务框架
锁的概念:
package com.bjsxt.height.lock020; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class UseReentrantLock { private Lock lock = new ReentrantLock(); public void method1(){ try { lock.lock(); System.out.println("当前线程:" + Thread.currentThread().getName() + "进入method1.."); Thread.sleep(1000); System.out.println("当前线程:" + Thread.currentThread().getName() + "退出method1.."); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void method2(){ try { lock.lock(); System.out.println("当前线程:" + Thread.currentThread().getName() + "进入method2.."); Thread.sleep(2000); System.out.println("当前线程:" + Thread.currentThread().getName() + "退出method2.."); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String[] args) { final UseReentrantLock ur = new UseReentrantLock(); Thread t1 = new Thread(new Runnable() { @Override public void run() { ur.method1(); } }, "t1"); t1.start(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } Thread t2 = new Thread(new Runnable() { @Override public void run() { ur.method1(); } }, "t2"); t2.start(); //System.out.println(ur.lock.getQueueLength()); } }
package com.bjsxt.height.lock020; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class UseCondition { private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); public void method1(){ try { lock.lock(); System.out.println("当前线程:" + Thread.currentThread().getName() + "进入等待状态.."); Thread.sleep(3000); System.out.println("当前线程:" + Thread.currentThread().getName() + "释放锁.."); condition.await(); // Object wait System.out.println("当前线程:" + Thread.currentThread().getName() +"继续执行..."); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public void method2(){ try { lock.lock(); System.out.println("当前线程:" + Thread.currentThread().getName() + "进入.."); Thread.sleep(3000); System.out.println("当前线程:" + Thread.currentThread().getName() + "发出唤醒.."); condition.signal(); //Object notify } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String[] args) { final UseCondition uc = new UseCondition(); Thread t1 = new Thread(new Runnable() { @Override public void run() { uc.method1(); } }, "t1"); Thread t2 = new Thread(new Runnable() { @Override public void run() { uc.method2(); } }, "t2"); t1.start(); t2.start(); } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【译】《Clean C#》
本文是《Clean C#》一书译文的序言,阅读译文请移步至:《Clean C#》译文。 《Clean C#》的副标题是Readable,Maintainable,Pleasurable,本书旨在提供一些编写具有良好可读性与可维护性代码的建议。虽然书名中带有C#字眼,但书中提供的经验绝不仅限于C#,也可用于其他语言。 书中内容涉及到:命名方式、异常处理、代码基本设计原则、单元测试及代码排版等多个方面内容。 该译文不是对原著进行一字一句的翻译,而是根据自己的理解,对原著的语言进行了重新编排以便更符合汉语表述习惯。此外,还对书中内容进行了一定程度的修订(增、删及内容顺序的调整),如,在每个章节的结尾会加入一段总结,文末也可能会添加一些扩展阅读文章链接。 书中的示例代码,如果命名空间名称以Dirty结尾,表示是这段代码是待优化代码;而命名空间名称以Clean结尾,则表示这段代码已按照书中的观点进行优化。 namespace CleanCSharp.Errors.Dirty { // 待优化 } namespace CleanCSharp.Errors.Clean { // 已优化 } 由于本人...
- 下一篇
JavaScript学习(一)
一、使用软件Hbuilder。 二、javascript(java编程语言,script脚本:java的脚本语言) 诞生于1995年,出现时主要用于处理网页中的前端验证。----所谓前端验证,就是指检查用户输入内容是否符合一定的规则。比如:用户名称的长度、密码的长度、邮箱的格式等。 javascript的标准是SCMAscript 一个完整的javascript由三个部分组成:ECMAscript(标准)、DOM(文档对象模型)、BOM(浏览器对象模型) 特点:1.解释型语言 ---不需要编译,可以直接运行 2.类似于C和java的语法结构 3.动态语言 4.基于原型的面向对象 <!--js代码需要编写到script的标签中--> <script type="text/javascript"> </script> 三、javascript语句警告框、页面body、控制台输出 /*控制浏览器弹出一个警告框*/ alert("这是第一行JavaScript代码") /*让计算机在页面中输出一个内容*/ document.write("...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境