1、程序_进程_线程

2、在 Java 中创建线程的两种方式

1) 继承 Thread

2) 实现 Runnable 接口

3、线程的生命周期

4、同步与死锁---过多的同步就会导致死锁

1) 同步方法:同步监视器为当前对象 this

2) 同步代码块:(同步监视器/共享资源的对象){

}

5、线程间的通信

1) wait()

2) notify()

3) notifyAll()

6、案例

编写两个线程,一个线程打印 1-52 的整数,另一个线程打印字母 A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一 个字母,交替循环打印,直到打印到整数 52 和字母 Z 结束。

要求:

1) 编写打印类 Printer,声明私有属性 index,初始值为 1, 用来表示是第几次打印。

2) 在打印类 Printer 中编写打印数字的方法 print(int i),3 的倍数就使用 wait()方法等待,否则就输出 i,使用 notifyAll() 进行唤醒其它线程。

3) 在打印类 Printer 中编写打印字母的方法 print(char c),不是 3 的倍数就等待,否则就打印输出字母 c,使用 notifyAll() 进行唤醒其它线程。

4) 编写打印数字的线程 NumberPrinter 继承 Thread 类,声明私有属性 private Printer p;在构造方法中进行赋值,实现父类的 run 方法,调用 Printer 类中的输出数字的方法。

5) 编写打印字母的线程 LetterPrinter 继承 Thread 类,声明私有属性 private Printer p;在构造方法中 进行赋值,实现父类的 run 方法,调用 Printer 类中的输出字母的方法。

6) 编写测试类 Test,创建打印类对象,创建两个线程类对象,启动线程。

共享资源Printer类:

public class Printer {private int index = 1;//用于统计第几次打印public synchronized void print(int num) {while(index % 3 == 0) {try {//进入阻塞状态this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.print(num);index++;//唤醒在Printer这个对象上的所有等待线程this.notifyAll();}public synchronized void print(char letter) {while(index % 3 != 0) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.print(letter);index++;this.notifyAll();}
}

线程代理NumberPrinter类:

public class NumberPrinter implements Runnable{private Printer printer;public NumberPrinter(Printer printer) {this.printer = printer;}@Overridepublic void run() {for (int i = 1; i <= 52; i++) {printer.print(i);}}
}

线程代理类LetterPrinter类:

public class LetterPrinter implements Runnable{private Printer printer;public LetterPrinter(Printer printer) {this.printer = printer;}@Overridepublic void run() {for(char i = 'A';i <= 'Z';i++) {printer.print(i);}}
}

测试类:

public class Test {public static void main(String[] args) {//(1)创建贡献资源对象Printer printer = new Printer();//(2)创建代理类,并启动线程NumberPrinter np = new NumberPrinter(printer);LetterPrinter lp = new LetterPrinter(printer);new Thread(np).start();new Thread(lp).start();}
}

尚学堂百战程序员

百战程序员_IT6000集_影响6000万学习IT的中国人【官网】

线程打印_线程知识回顾相关推荐

  1. 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数

    作者:dadiyang来源:https://blog.csdn.net/dadiyang/article/details/88315124 面试场景 面试官:Java多线程了解吗?你给我写一下,起两个 ...

  2. 线程打印_经典面试题——两个线程交替打印奇数和偶数

    前提 今天下班时候和同事聊天偶然听到面试题"两个线程交替打印奇数和偶数"的实现,这里做一个复盘. 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视 ...

  3. python 创建线程打印_如何使用免费软件创建高质量的照片打印

    python 创建线程打印 Photoshop may be the professional standard for high quality photo prints, but that doe ...

  4. java 动态线程池_线程池的参数动态调整

    经典面试题 这次的文章还是绕回了我写的第三篇原创文章<有的线程它死了,于是它变成一道面试题>中留下的几个问题: 哎,兜兜转转,走走停停.天道好轮回,苍天饶过谁? 在这篇文章中我主要回答上面 ...

  5. springboot 压测 50并发 线程等待_线程池+CountDownLatch——高并发就是这么简单

    今天和大家分享的是:在开发服务端API时候,如何合理的运用线程池+CountDownLatch来保证API的高并发访问. 首先,作为Java开发的同学来说,java.util.concurrent并发 ...

  6. python qthread 线程退出_线程:概念和实现

    翻译:老齐 译者注:与本文相关图书推荐:<Python大学实用教程><跟老齐学Python:轻松入门> ★ 本文将分两部分刊发. " 第一部分 Python线程允许程 ...

  7. mysql 关闭线程池_线程池安全的关闭方式

    对于一些定时任务或者网络请求服务将会使用线程池,当应用停机时需要正确安全的关闭线程池,如果处理不当,可能造成数据丢失,业务请求结果不正确等问题. 关闭线程池我们可以选择什么都不做,JVM 关闭时自然的 ...

  8. Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)

    文章目录 1.线程的定义,进程和线程的关系 2.Linux下的线程 Linux原生线程库(pthread库pthread.h) 线程的优点 线程的私有数据 3.线程控制 ①创建线程(pthread_c ...

  9. [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)

    文章目录 线程概念 进程和线程的关系 线程的优点 线程的缺点 线程控制 Linux线程和接口关系的认识 线程创建 线程ID及进程地址空间布局 线程等待 线程终止 线程终止状态 线程分离 LWP和pth ...

最新文章

  1. 用mysqlworkbench生成ER图
  2. 【Android工具】好软件推荐,安卓手机免费好用的SSH客户端——JuiceSSH
  3. 怎么做才能让浏览器看不到token_卫生间回填及防水怎么做才能后患无忧
  4. Oracle的分页实现
  5. 计算机网络的含义是什么意思,互联网的基本含义是什么
  6. VS2010皮肤控件介绍
  7. Nginx的启动阶段讲解
  8. 问世 20 多年的 PHP 还是最好的编程语言吗?
  9. Python测试转岗网络安全测试,挑战年薪30W+
  10. tjh_pipeline_tools Maya工具盒 1.2.1 下载及教程 动画影视团队工具共享系统
  11. 关于Dev C++等软件突然提示16位应用程序不兼容的问题
  12. Java设计模式:游戏中的角色和武器抽象设计
  13. Django 千锋培训读书笔记
  14. 使用Github和PicGO搭建免费图床
  15. 14种异常检测方法汇总
  16. 美苏太空竞赛历年卫星火箭发射以及历史事件介绍
  17. 3d游戏设计读书笔记六
  18. Ebistrategy亦策软件提升仙婷贸易竞争实力
  19. 华为——OSPF单区域实验配置,实验抓包分析,五种报文分析,六种LSA介绍,以及如何建立邻接关系的七种状态
  20. BlendNormals

热门文章

  1. ABAP 的历史,现在,和未来的讨论
  2. Kitten编程猫 里的一步积木设计原理
  3. Angular jasmine单元测试框架里使用it函数定义single spec
  4. SAP Spartacus 3.0 的一些变化
  5. Angular HTTPClient的使用方法
  6. 使用科大讯飞语音转文字的服务进行电话录音分析
  7. Method 'GET_ENTITYSET' not implemented in data provider class - correct case
  8. SAP Engagement Center的ShellCarousel控件control
  9. SAP UI5应用点了search按钮后的实现调试
  10. 观察者模式在SAP ui5修改theme实现中的应用