`
xiang37
  • 浏览: 430992 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

多线程简单示例

 
阅读更多

多线程的一个简单示例

 

主要使用notify与wait方法。

 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.xiva.baseKnowledge;

import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrator
 */

public class MutiThread {

    public static int count = 0;
    //public static boolean mutex = true;

    public synchronized void print() {    
        System.out.println(count);
    }

    public synchronized void add(int i) {
        count = count + i;
        System.out.println("add");
    }

    public static void main(String[] args) {
        MutiThread mThread = new MutiThread();
        PrintThread pThread = new PrintThread(mThread);
        AddThread addThread = new AddThread(pThread);
        addThread.start();
        pThread.start();
    }
}

class  PrintThread extends Thread {

    private final MutiThread mThread;
    
    private volatile boolean startP = false;
    
    public PrintThread(MutiThread mThread) {
        this.mThread = mThread;
    }
    
    public MutiThread getMThread(){
        return this.mThread;
    }
    
    public synchronized void notifyPrint(){
      startP = true;
      notify();
    }
    
    public synchronized void print(){
        if(startP){
            try {
                TimeUnit.SECONDS.sleep(2);
                mThread.print();
                startP = false;
            } catch (InterruptedException ex) {
                Logger.getLogger(PrintThread.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else{
            try {
                wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(AddThread.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    
    @Override
    public void run() {
        while (true) {
            print();
        }
    }
}

class AddThread extends Thread {

    private final PrintThread pThread;
    
    public AddThread(PrintThread pThread) {
        this.pThread = pThread;
    }
        
    @Override
    public void run() {
        for (int i = 1; i < 1000; i++) {
            try {
                //Thread.sleep(5000);
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException ex) {
                Logger.getLogger(MutiThread.class.getName()).log(Level.SEVERE, null, ex);
            }
            pThread.getMThread().add(i);
            pThread.notifyPrint();
        }
    }
}
 其中的锁机制有待改进。
分享到:
评论

相关推荐

    Socket多线程简单示例

    在这个简单示例中,我们将探讨如何使用Socket和多线程来实现客户端和服务端的交互。 首先,让我们理解Socket的基本概念。Socket是操作系统提供的一种接口,它允许应用程序通过网络发送和接收数据。在TCP/IP协议栈中...

    多线程编程示例

    在IT领域,多线程编程是一项关键技能,尤其是在性能优化和并发处理方面。本文将深入探讨多线程编程的基础知识,以帮助初学者快速入门。 首先,我们需要理解什么是多线程。多线程是指在一个进程中同时执行多个独立的...

    简单的多线程示例delphi7

    总结起来,"简单的多线程示例delphi7"这个项目提供了一个基础的多线程实现,通过TThread类创建新线程,并通过重写Execute方法来定义线程任务。开发者可以通过学习这个示例,理解如何在Delphi 7中进行多线程编程,以...

    C# winform多线程模板示例,winform多线程例子,C#

    通过这个C# WinForm多线程模板示例,开发者可以学习到如何优雅地处理后台任务,保持UI响应,并理解多线程编程中的核心概念。同时,了解如何利用线程同步机制以及异步编程模型,能够更好地优化应用程序的性能和用户...

    C#(asp.net)多线程用法示例(可用于同时处理多个任务)

    本示例主要介绍了如何使用`System.Threading.Thread`类来创建和管理多线程,以进行并行计算。 首先,我们需要引入必要的命名空间: ```csharp using System; using System.Collections.Generic; using System.Linq;...

    易语言多线程简单实用例子分享

    在这个“易语言多线程简单实用例子分享”中,我们将探讨如何在易语言中利用多线程技术来提高程序的运行效率和用户体验。 多线程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,而不是顺序地执行。在...

    java线程,多线程和线程同步简单示例

    NULL 博文链接:https://dr-yanglong.iteye.com/blog/1967574

    简单实现多线程同步示例(模拟购票系统)

    本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...

    多线程编程一个简单示例轻松入门

    ### 多线程编程简单示例轻松入门 #### 核心知识点概述 本文将通过一个简单的多线程程序示例来介绍多线程的基本概念、创建线程的方法以及线程间的基本交互方式。示例代码在VC++6.0环境下可以直接运行,并提供了详细...

    winform多线程经典实例超级简单易懂

    winform多线程经典实例超级简单易懂。和传统的委托不同。使用了SynchronizationContext技术。具体SynchronizationContext技术优势可以百度。 几行代码就可以实现多线程委托。超级简单。

    C++11多线程示例

    本文将深入探讨C++11中的多线程特性,并通过描述中的示例来展示如何创建和管理线程。 首先,要使用C++11的多线程功能,你需要包含`&lt;thread&gt;`头文件。在这个头文件中,定义了一个`std::thread`类,它是创建新线程的...

    C#简单的多线程计划示例

    本示例,"C#SchedulerManager每日多线程计划执行代码",着重于如何使用C#来实现一个简单但实用的任务调度器,它能够在每天固定的时间启动多个线程执行预定的任务。以下是对这个主题的详细讲解: 首先,我们需要理解...

    用C#语言编写的一个多线程示例

    在C#编程中,多线程是一项核心技能,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本示例将深入探讨如何在C#中创建和管理线程,以及它带来的优势和挑战。 一、多线程概念 多线程是指在一个进程内...

    C#-多线程排序示例

    本文将深入探讨如何在C#中实现多线程排序,并提供一个适用于初学者的学习示例。 首先,理解多线程的概念至关重要。多线程是指在一个应用程序中同时运行多个独立的执行路径,每个路径称为一个线程。在C#中,我们可以...

    Qt 多线程及简单实例 demo

    Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...

    多线程代码示例

    在标题“多线程代码示例”中,我们聚焦于通过编程实现多线程的实例。描述简洁明了,暗示我们将讨论如何在实际代码中运用多线程。 多线程的概念源于操作系统中的并发执行机制,它允许多个任务或子任务在单个处理器上...

    js多线程简单通信示例.js

    多线程通信示例

    Java 多线程 订票 示例 线程安全

    现在,让我们来看一个简单的订票系统的Java多线程示例。假设我们有一个票务系统,其中的`TicketService`类包含一个`tickets`变量表示剩余票数: ```java public class TicketService { private int tickets = 100;...

    java多线程操作简单示例

    ### Java多线程操作简单示例 #### 一、引言 Java作为一种广泛使用的编程语言,其多线程特性为其提供了强大的并发处理能力。通过合理地利用多线程技术,可以显著提高应用程序的性能和响应速度。本文将通过一个简单...

    POSIX规范多线程代码示例

    在这个名为"POSIX规范多线程代码示例"的压缩包中,你将找到六个使用C++的POSIX线程库(pthread)编写的示例,它们逐步展示了如何在Linux和Windows环境下(使用Visual Studio,需添加-lpthread链接选项)创建和管理多...

Global site tag (gtag.js) - Google Analytics