`

线程管理

    博客分类:
  • java
阅读更多
/*
* 把一个线程交给另一个线程称:上下文切换。
* 如果处理器自愿放开处理器控制权,称为:协同式多任务,如果不这样,会造成其他挂起。
* 更多的是采用抢占式线程管理,这种优点:一是能防止单个线程单独占用处理器,二是程序员无需负责上下文切换,
* 而将责任交给操作系统
*/

/*
* 下面实例演示两个账号转账,但条件是必需保持平衡。有竞争条件一定要注意,下面可能实例不正确,但大部分情况下是正确的。
* 这样原因是线程切换时问题。在后面我们会改下。
*
*
*/
package lession3;
import java.text.*;
import java.util.*;
public class AccountManager {
protected CustomerAccount savings;
protected CustomerAccount checking;

public final static int SAVINGS_ACCOUNT=1;
public final static int CHECKING_ACCOUNT=2;
public static void main(String args[]){
int transfers=1000000;
try{
transfers=Integer.parseInt(args[0]);

}catch(Exception e){}
AccountManager am=new AccountManager(transfers);
}

public AccountManager(int transfers){
savings=new CustomerAccount(SAVINGS_ACCOUNT,1000);
checking=new CustomerAccount(CHECKING_ACCOUNT,1000);
NumberFormat formatter=NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("Total balance before thansfers:"+formatter.format(savings.getBalance()+checking.getBalance()));

TransferManager tm1=new TransferManager(checking,savings,transfers);
TransferManager tm2=new TransferManager(checking,savings,transfers);

Thread t1=new Thread(tm1);
Thread t2=new Thread(tm2);
//
t1.start();
t2.start();
try{
t1.join();
t2.join();
}catch(Exception e){

}
System.out.println("Total balance after transfers:"+formatter.format(savings.getBalance()+checking.getBalance()));
}

}

//管理账号类
class TransferManager implements Runnable{
    protected CustomerAccount fromAccount;
    protected CustomerAccount toAccount;
    protected int transferCount;
    public TransferManager(CustomerAccount fromAccount,CustomerAccount toAccount ,int transfers){
    this.fromAccount=fromAccount;
    this.toAccount=toAccount;
    this.transferCount=transfers;
    }
public void run() {
double balance;
double transferAmount;
for(int i=0;i<transferCount;i++){
balance=fromAccount.getBalance();
transferAmount=(int)(balance*Math.random());
balance-=transferAmount;
fromAccount.setBalance(balance);
balance=toAccount.getBalance();
balance+=transferAmount;
toAccount.setBalance(balance);
}


}

}
//账号类
class CustomerAccount{
protected int accountType;
protected double balance;
public CustomerAccount(int type,double balance){
this.accountType=type;
this.balance=balance;
}
public int getAccountType() {
return accountType;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}

}

分享到:
评论

相关推荐

    PowerThreading 线程管理器

    PowerThreading线程管理器是一款高效且强大的工具,专为优化多线程应用程序设计。它在软件开发领域中扮演着重要角色,特别是在处理并行计算和并发任务时,能够显著提高程序性能,减少资源浪费,确保系统稳定性。下面...

    实验三 线程管理.docx

    "线程管理" 本文将从实验三的线程管理中,总结出以下知识点: 一、线程管理的基本概念 * 线程管理是操作系统中的一种机制,用于管理和调度线程的执行。 * 线程可以处于不同的状态,包括running、ready、blocked等...

    创建线程类轻松实现线程管理

    本文将深入探讨如何创建线程类以及如何进行线程管理,帮助你轻松掌握这一核心技能。 首先,我们来看看如何在Java中创建线程类。Java提供两种主要方式来创建线程:继承`Thread`类或实现`Runnable`接口。这两种方法都...

    操作系统课程设计报告:实验三 Pintos线程管理【Pintos Project 1: Threads】

    Pintos线程管理 Pintos Project 1: Threads是操作系统课程设计报告的实验三,主要介绍了Pintos线程管理的实现。以下是相关知识点的总结: 1. 优先级调度:在Pintos中,线程的优先级是通过priority成员变量来实现的...

    基于c#的简单的进程与线程管理器

    本文将详细讲解如何使用C#语言来创建一个简单的进程与线程管理器,适合初学者入门。 首先,让我们了解基础概念。进程是操作系统中正在运行的一个程序实例,每个进程都有独立的内存空间,而线程则是进程内的执行单元...

    stm32f103c8t6移植RT-Thread之线程管理

    在“stm32f103c8t6移植RT-Thread之线程管理”这个主题中,我们将探讨如何在STM32F103C8T6上创建和管理线程,以及线程如何与裸机程序相比提供更高级别的抽象和灵活性。 首先,我们需要了解RT-Thread的内核启动流程,...

    操作系统实验(linux),多线程管理,多进程管理

    在本实验中,我们将深入探讨Linux操作系统中的两个关键概念:多线程管理和多进程管理。这些概念对于理解和优化系统的性能至关重要,特别是在并发编程和系统资源调度方面。 首先,让我们了解多线程管理。在计算机...

    线程管理器

    线程管理器是计算机系统中一个至关重要的组件,特别是在多任务和并发编程环境中。它负责创建、调度、管理和销毁线程,确保系统资源的有效利用和程序的高效运行。线程是操作系统分配处理器时间的基本单元,允许多个...

    线程创建和管理

    使用Thread类创建线程需要手动地创建和管理线程,这需要开发者有充分的线程管理经验和知识。Thread类适合长作业和需要手动控制线程的场景。 例如,在一个图形用户界面程序中,我们可以使用Thread类来创建一个独立的...

    线程管理工具类

    线程管理是多线程编程中的关键环节,它涉及到如何创建、控制、同步以及销毁线程,以确保程序的高效性和正确性。在Java中,线程管理工具类可以帮助我们更方便地处理这些任务,避免复杂的并发问题。"线程管理工具类"如...

    Nachos的线程管理模块升级

    【线程管理模块升级】 在操作系统的设计和实现中,线程管理是核心组成部分之一,它涉及到线程的创建、销毁、调度以及同步互斥等问题。Nachos是一个开源的类UNIX操作系统,提供了一个教学和研究操作系统的平台。在这...

    C#线程详解,单线程,多线程,线程管理

    本篇文章将深入探讨C#中的单线程、多线程以及线程管理,帮助你理解和掌握这一核心概念。 ### 1. 单线程 在单线程环境中,程序按照预定的顺序执行,一次只能处理一个任务。C#的标准控制流(如`Console.ReadLine()`...

    7.线程管理动态_线程管理_

    线程管理是操作系统中的核心概念,特别是在多任务和并发编程中。在本主题中,我们将深入探讨线程管理,特别是如何通过串口输入命令来控制线程的状态。串口通信是一种常见的设备间通信方式,而线程管理则涉及到程序...

    IOS线程管理,线程同步

    在iOS开发中,线程管理是一项至关重要的技能,它关系到应用的性能和用户体验。本文将深入探讨iOS线程管理,特别是线程的创建和线程同步,这些都是开发者需要掌握的基本知识。 首先,我们来理解一下线程的概念。线程...

    Java多线程管理示例

    Java多线程是Java编程中的一个关键特性,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程的核心概念、...

    线程管理.rar

    线程管理是操作系统中的核心概念,特别是在多核处理器和并发编程环境下,理解并熟练掌握线程管理对于提高软件性能和优化资源使用至关重要。线程,作为程序执行的最小单元,可以独立于其他线程执行代码,共享同一进程...

    操作系统线程管理

    操作系统进程(线程)管理课件

    鸿蒙线程管理测试Demo

    鸿蒙线程管理测试Demo是基于华为自研的鸿蒙操作系统(HarmonyOS)进行的一次实战演示,主要关注的是操作系统中的线程管理和调度。在计算机科学中,线程是程序执行的基本单元,它们共享同一进程的资源,通过并发执行...

    OC多线程管理

    在iOS和OS X开发中,Objective-C(OC)的多线程管理是至关重要的技能,它关乎应用的性能、响应速度以及资源利用效率。多线程允许程序同时执行多个任务,提升用户体验,尤其是在处理耗时操作如网络请求、大数据计算或...

    kafka java单线程,多线程,多线程管理器代码

    在本文中,我们将深入探讨Apache Kafka的Java编程实践,特别是关注单线程和多线程在Kafka生产者与消费者中的应用,以及多线程管理器的实现。Apache Kafka是一个分布式流处理平台,广泛用于实时数据管道和消息传递。...

Global site tag (gtag.js) - Google Analytics