专栏首页程序员的成长之路《Java从入门到放弃》JavaSE入门篇(十六):多线程

《Java从入门到放弃》JavaSE入门篇(十六):多线程

出处:https://blog.csdn.net/u010255818/article/details/50864566

Runnable接口与Thread类

创建线程的两种方法

用户线程与守护线程

线程同步机制

public class BufferLock{ private int value = 0; private boolean isEmpty = true; public BufferLock(){ //构造方法 this.value = 0; this.isEmpty = true; } /* 成员方法,操作数据;加互斥锁 */ public synchronized void put(int value){ while(isEmpty == false){ //状态非空时:持续等待 try{ this.wait(); }catch(InterruptedException e){} } //状态空时:写入数据,先置标志位为非空,再唤醒其他进程 this.value = value; isEmpty = false; notify(); } public synchronized int get(){ while(isEmpty == true){ //状态为空时:持续等待 try{ this.wait(); }catch(InterruptedException e){} } //状态非空时:获取数值,先置标志位空,再唤醒其他进程 int temp = value; isEmpty = true; notify(); return temp; } } /*发送进程类*/ class Sender extends Thread{ private BufferLock bufferLock = null; public Sender(BufferLock bufferLock){ //构造方法 this.bufferLock = bufferLock; } public void run(){ for(int i=0 ;i<10 ;i++){ bufferLock.put(i); System.out.println("send:"+i); } } } /*接收进程类*/ class Receiver implements Runnable{ private BufferLock bufferLock = null; public Receiver(BufferLock bufferLock){ this.bufferLock = bufferLock; } public void run(){ for(int i=0 ; i<10 ; i++){ System.out.println("\t\t receive:"+bufferLock.get()); } } } /*测试类*/ class Test{ public Test(){ super(); } public static void main(String args[]){ BufferLock bufferLock = new BufferLock(); Sender sender = new Sender(bufferLock); sender.start(); Receiver receiver = new Receiver(bufferLock); new Thread(receiver).start(); } }

END

本文分享自微信公众号 - 程序员的成长之路(cxydczzl)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java性能优化的50个细节

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。

    良月柒
  • 比Redis快5倍的中间件,为啥这么快?

    今天给大家介绍的是KeyDB,KeyDB项目是从redis fork出来的分支。众所周知redis是一个单线程的kv内存存储系统,而KeyDB在100%兼容re...

    良月柒
  • 一份完整的 MySQL 开发规范,进大厂必看!

    https://www.cnblogs.com/huchong/p/10219318.html

    良月柒
  • lifecycle-mvp,像前端那样组合式写页面

    用户1269200
  • JS实现简易的计算器

    自认脑袋不够大,就实现一个普通版本的吧(支持正负数加减乘除等基本连续的运算,未提供括号功能)

    书童小二
  • 【设计模式-策略模式】

    【导读】业务场景中,很多需要根据具体情况选择不同的处理方式,比如出行该选择何种交通方式,商场的活动的促销策略等。这就是策略模式。

    Liusy
  • 支付宝二面:Mybatis接口Mapper内的方法为啥不能重载吗?我直接懵逼了...

    言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投鞭断流的霸权,连目标target都不要的科幻模式。

    掌上编程
  • java之StopWatch源码分析

    计时这个词语在生活中被应用的很普遍,体育竞赛时频繁出现的秒表,发令信号一经发出,秒表就在滴答滴答流转开始计时了,秒表此时的作用就是计时的代名词,在我们编写代码的...

    后端Coder
  • Hibernate框架简单应用步骤

    用户1127987
  • Java设计模式(二)----建造者模式

    建造者模式 一、概念 1、产品的内部表象 2、对象性质的建造 二、建造模式的结构 ...

    汤高

扫码关注云+社区

领取腾讯云代金券