`
liuguly
  • 浏览: 10233 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

多线程复习

 
阅读更多
 1public class MyStack {
 2    private int[] a;
 3    private int count = 0;
 4    public final int MAX_SIZE;
 5
 6    public MyStack(int size) {
 7        MAX_SIZE = size;
 8        a = new int[size];
 9        count = 0;
10    }

11
12    public synchronized void push() {
13         while(count==MAX_SIZE){//这里用while而不是if因为当被唤醒时,该线程处于锁池等待获取锁,这个时候可能会有别的该线改变数组的大小。所以唤醒时继续检查数组是否已满。
14             try {
15                this.wait(); //释放掉当前的对象锁,在等待池等待
16            }
 catch (InterruptedException e) {
17                e.printStackTrace();
18            }

19         }

20         a[count++]=count;
21         System.out.println(Thread.currentThread().getName()+"压入数据:"+count);
22         this.notify();  //唤醒生产者消费者线程
23    }

24
25    public synchronized int pop() {
26             while(count ==0){
27                 try {
28                    this.wait();
29                }
 catch (InterruptedException e) {
30                    e.printStackTrace();
31                }

32             }

33             this.notify();
34             System.out.println(Thread.currentThread().getName()+"弹出数据:"+count);
35             return a[--count];
36     }

37}

38/** *//**
39 *生产者
40 **/

41public class Producer extends Thread {
42
43    private MyStack stack;
44    
45    public Producer(MyStack stack){
46        this.stack = stack;
47    }

48    @Override
49    public void run() {
50        while (true{
51            stack.push();
52            try {
53                Thread.sleep(200);
54            }
 catch (InterruptedException e) {
55                e.printStackTrace();
56            }

57        }

58    }

59}

60/** *//**
61 *消费者
62 **/

63public class Consumer extends Thread{
64             
65    private MyStack stack;
66    
67    public Consumer(MyStack stack){
68        this.stack = stack;
69    }

70    
71    @Override
72    public void run() {
73        while(true){
74            stack.pop();
75            try {
76                Thread.sleep(300);
77            }
 catch (InterruptedException e) {
78                e.printStackTrace();
79            }

80        }

81    }

82}

线程状态图
分享到:
评论

相关推荐

    C#多线程复习题目80道+答案

    此资源有利于初学者巩固C#多线程的基础知识,内有80道练习题及答案。

    E05_多线程复习.pdf

    在计算机科学中,多线程是并发编程的重要概念,它允许多个任务在同一时间执行,提高了系统的效率和响应性。本文将深入探讨多线程的相关知识点。 1. **进程与线程** - **进程**:是操作系统分配资源的基本单位,每...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能的应用程序。本压缩包包含6个C#.NET多线程实例,涵盖了多线程的基本使用以及更复杂的互斥控制机制...

    多线程应用程序设计

    这一步骤主要目的是为了能够在远程机器上运行多线程程序,同时也可以复习之前的实验内容。 2. **多线程程序设计与实现**:利用pthread库函数编写多线程程序。在这个过程中,需要学习如何创建线程、管理线程间的同步...

    C# WinForm多线程开发复习进程.pdf

    C# WinForm 多线程开发复习进程 C# WinForm 多线程开发是一种复杂的编程技术,用于提高程序的效率和响应速度。多线程开发可以使程序同时执行多个任务,提高程序的效率和性能。但是,多线程开发也存在一些挑战,例如...

    win32多线程程序设计 配套 源码

    标题“win32多线程程序设计 配套 源码”暗示了这是一个关于Windows 32位操作系统平台上的多...对于初学者来说,这些示例提供了宝贵的实践经验,对于有经验的开发者来说,它们则可以用来复习或测试新的多线程编程技巧。

    实验八:Java多线程

    ### 实验八:Java多线程 #### 一、实验目的与知识点概述 在本实验中,我们将深入了解线程与进程的基本概念、它们之间的区别与联系,并掌握多线程技术在Java中的应用方法。具体包括以下几点: 1. **线程与进程的...

    多线程、JVM复习&面试&强化训练100题

    多线程和JVM是Java编程中非常重要的概念,特别是对于进行面试准备的开发者来说,掌握这些知识至关重要。...以上这些知识点都是多线程和JVM复习中的重要内容,掌握这些知识将大大增强面试者的信心,并在面试中占据优势。

    计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi

    计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi

    Java飞机游戏

    此次实训不同,在些之前我作了一些准备,对多线程复习了好几编,实训果然派上用场。 通过这次JAVA飞机游戏实训,我对JAVA有了更深刻的认识, 对面向对象,和游戏中必然用到的多线程有了更深理解。实训中,我觉得最...

    多线程的端口扫描/C语言、套接字开发

    通过对网络通信基础知识的复习以及对关键代码片段的解析,我们了解了如何使用Winsock2库进行网络通信,并通过多线程技术提高了端口扫描的效率。此外,还学习了一些实用的网络编程技巧,例如如何构造和解析TCP数据包...

    多线程、JVM复习及面试100题

    在Java编程领域,多线程和Java虚拟机(JVM)是两个至关重要的主题,尤其在面试中常常被考察。本文将围绕这两个核心概念展开,深入解析相关知识点,并结合常见的面试问题进行阐述。 首先,我们来看看多线程。在单核...

    01大数据面试复习----Java基础---集合类、多线程、JVM.zip

    在准备大数据面试的过程中,Java基础是必不可少的一部分,尤其聚焦于集合类、多线程和JVM这三大核心领域。下面将分别对这三个方面进行深入探讨。 **一、Java集合类** Java集合框架是处理对象组的重要工具,它包括...

    系统编程—消息队列—多线程—对话(双线程收发)

    在虚拟机上用消息队列实现对话(双线程收发),即A<->B; 同时又可以复习多线程和信号捕捉

    10个vc多线程实例

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在Windows环境下,Visual C++(简称VC)提供了强大的多线程支持。标题“10个vc多线程实例”表明这是一个关于使用VC进行多线程编程的教学资源,包含了10个...

    429.427.JAVA基础教程_多线程-复习:线程的创建与常用方法(429).rar

    多线程是Java中的核心特性,它使得程序能够同时执行多个任务,提高了应用程序的效率和响应性。本教程聚焦于Java多线程的创建与常用方法,帮助开发者深入理解这一关键概念。 在Java中,线程的创建主要有两种方式:...

    Java期末复习||应用程序设计-多线程和泛型

    Java中的多线程和泛型是程序设计中的关键概念,它们极大地增强了代码的并发性和可复用性。在Java中,实现多线程有两种主要方式:一是通过继承`Thread`类,二是通过实现`Runnable`接口。通常推荐使用实现`Runnable`...

    计算机后端-Java-Java核心基础-第20章 多线程 03. 复习:线程的创建与常用方法.avi

    计算机后端-Java-Java核心基础-第20章 多线程 03. 复习:线程的创建与常用方法.avi

    多线程讲生产者与消费者

    多线程生产者与消费者,,生产者和消费者的解答网络上有多种线程版本,但却没看到进程版本,所以我就来填补这一“空白”了。PS:使用进程版本的另一个重要原因是,想顺便复习下共享内存。 我们使用信号量来同步,用...

    43道Java多线程高频题整理(附答案背诵版).md

    这份《43道Java多线程高频题整理(附答案背诵版)》资源是一份专门针对Java多线程编程的高频考题集,旨在帮助Java开发者系统掌握多线程的核心概念和实际应用。此资源涵盖了面试和工作中常见的多线程问题,通过详细的...

Global site tag (gtag.js) - Google Analytics