多线程的一个简单示例
主要使用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();
}
}
}
其中的锁机制有待改进。
分享到:
相关推荐
多线程网络编程简单示例 欢迎大家下载,一个客户端,一个服务端简单实例
简单多线程编程入门,可以帮助你实现第一个多线程程序
delphi7写的简单的多线程是示例,平时开发了解使用
NULL 博文链接:https://dr-yanglong.iteye.com/blog/1967574
主要介绍了C#(asp.net)多线程Thread用法,可用于同时处理多个任务,以简单数学运算为例讲述了Thread类实现多线程的相关技巧,需要的朋友可以参考下
易语言多线程简单实用例子分享。@小凡じ亦匿名。 。Tags:多线程。
winform多线程经典实例超级简单易懂。和传统的委托不同。使用了SynchronizationContext技术。具体SynchronizationContext技术优势可以百度。 几行代码就可以实现多线程委托。超级简单。
QT多线程编程示例,非常简单明朗的示例程序。
简单实现多线程同步示例(模拟购票系统),内容为实现多线程同步过程,模拟购票系统进行同步购买情况;该处并未考虑线程守护问题,后期将对线程锁等安全问题进行初步研究!
Delphi多线程完整示例源码,附完整源码及编译好的示例程序。代码风格简单实用,线程回调函数清晰易懂
C#SchedulerManager每日多线程计划执行代码示例
Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...
多线程通信示例
Delphi中最简单的多线程例子 Delphi中最简单的多线程例子
该文档包含一个多线程的程序。在VC++6.0下课直接运行。文档中有较为详细的讲解。
深入浅出java多线程代码示例,由简单到复杂,代码示例,供参考学习
实现windows下多线程简单示例,初步认识window多线程
spring定时任务 spring多线程的一个简单示例。
多线程程序是Java语言的一个很重要的特点。在一个Java程序中,我们可以同时并行运行多个相对独立的线程,例如,我们如果创建一个线程来进行数据输入输出,而创建另一个线程在后台进行其它的数据处理,如果输入输出...
一个用C#开发的多线程示例,简单明了,通俗易懂