`

Thread 初探

    博客分类:
  • java
阅读更多

     对线程了解不多,且不经常去用,最近想起,小小了解,且做个小demon和大家分享一下。

demon:两个线程,分别交替打印20次后中断。

      package com.cn.ld.exercises;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author Administrator
 * Exercise
 * 2011-9-22 下午04:55:55 
 * Description:
 */
public class Test {
 private static AtomicInteger s_count = new AtomicInteger(0);
 private static boolean stop ;
 private static int n = 0 ;
 private static int n1 = 0;
 private static int n2 = 0;
 public Test(boolean stop){
  this.stop = stop ;
 }
 public class thread1 implements Runnable {
  public  boolean stop= false ;
        public thread1(boolean  stop){
         this.stop = stop ;
        }
        public boolean  getStop(){
         return stop ;
        }
  public void run() {
   synchronized (s_count) {
    
    while (!stop) {
     if(n2==21&&n1==21){
      try {
       Thread.sleep(10000);
       stop = true ;
       Thread.interrupted();
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
     if (n % 2 != 0) {
        System.out.println(Thread.currentThread().getName()
        + ":运行了" + n1 + "次!");
      n++ ;
      n1++;
      s_count.notify();
     } else {
      try {
       s_count.wait();
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }
   }
  }

 }

 public class thread2 implements Runnable {
  public  boolean stop= false ;
        public thread2(boolean  stop){
         this.stop = stop ;
        }
        public boolean  getStop(){
         return stop ;
        }
  public void run() {
   synchronized (s_count) {
    
    while (!stop) {
     if(n2==21&&n1==21){
      try {
       Thread.sleep(10000);
       stop = true ;
       Thread.interrupted();
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      
     }
     if (n % 2 == 0) {
      System.out.println(Thread.currentThread().getName()
         + ":运行了" + n2 + "次!");
      n++;
      n2++;
      s_count.notify();
     } else {
      try {
       s_count.wait();
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }
   }
  }

 }

 public static void main(String[] args) throws InterruptedException {
  Test test = new Test(false);
  Thread t1 = new Thread(test.new thread1(test.stop));
  Thread t2 = new Thread(test.new thread2(test.stop));
     t1.start();
     t2.start();
 }
}

 

写的很丑陋,还请见谅,大家尽可怕转

分享到:
评论

相关推荐

    基于计算机软件开发的JAVA编程应用初探.zip

    对于并发编程,Java提供了丰富的线程API,包括Thread类和Runnable接口,以及ExecutorService和Future等高级并发工具。通过合理使用这些工具,开发者可以编写出高效并行运行的程序,充分利用多核处理器的优势。 在...

    Python多线程机制初探.pdf

    Python多线程机制初探的知识点如下: 一、多线程的必要性与应用场景 多线程编程是计算机程序中同时执行多个线程(或轻量级进程)的技术,目的是提高程序的执行效率。在多个场景下,多线程应用尤为必要,例如在网络...

    c++多线程编程初探

    ### C++多线程编程初探 在C++编程领域,多线程技术是一种非常重要的技术,它允许程序同时执行多个任务,极大地提高了程序的效率和响应能力。本篇文章将基于给定的代码示例来深入探讨C++中的多线程编程。 #### 一、...

    Spy++ 原理初探VC++相关源代码

    通过`CreateToolhelp32Snapshot`和`Process32First/Next`或`Thread32First/Next`函数,Spy++能够列出所有当前运行的进程和线程。源代码会展示如何遍历这些系统快照,并将信息显示在界面上。 在VC++环境下,源代码...

    Python多线程机制初探.zip

    Python多线程机制初探 在编程领域,多线程是一种常见的并发执行方式,它允许多个任务在单个程序中同时运行。Python虽然不是天生的并行计算语言,但其标准库提供了对多线程的支持,使得开发者可以利用多核处理器的...

    mysql死锁检测机制初探1

    MYSQL 死锁检测机制初探 在 MySQL 中,死锁检测机制是一种重要的机制,用于检测和解决事务之间的死锁问题。在本文中,我们将详细介绍 MySQL 死锁检测机制的原理和实现。 一、死锁的定义和原理 在 MySQL 中,死锁...

    基于游戏开发的Java语言教学初探.zip

    Java的线程API,包括Thread类、Runnable接口以及ExecutorService,是实现并发编程的重要工具。 然后,游戏中的对象模型和状态管理是核心部分。Java的面向对象特性使得游戏中的角色、场景、道具等可以被抽象为类,...

    Visual C#中调用Windows服务初探

    `ThreadFunc`方法作为线程的执行体,通过`System.Threading.Thread.Sleep`方法模拟延时,每60秒检查当前时间,如果检测到时间已经过去一小时,则弹出消息框提醒用户休息。 ```csharp public static void ThreadFunc...

    C++11 并发指南之std::thread 详解

    上一篇博客《C++11 并发指南一(C++11 多线程初探)》中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用法。 std::thread 在 <thread> 头文件中声明,因此使用 ...

    IBM之java性能诊断工具初探-IBM Support assitant的使用.docx

    ### IBM之Java性能诊断工具初探—IBM Support Assistant的使用 #### 一、引言 随着信息技术的飞速发展,企业级应用系统变得越来越复杂,性能优化成为了保证系统高效稳定运行的关键因素之一。Java作为跨平台的语言...

    RxAndroidDemo:rxjava初探

    【RxAndroidDemo:rxjava初探】 RxJava是一款在Java虚拟机上运行的反应式编程库,它将异步操作和事件驱动的编程模型引入到传统面向对象编程中。RxAndroid是RxJava的一个扩展,专门为Android平台进行了优化,使得...

    C++11 并发指南之多线程初探

    C++11通过引入`std::thread`库,使得多线程编程可以直接在语言层面上进行,提高了代码的可移植性和易读性。`std::thread`类允许创建和管理线程,使得在C++中创建和控制线程就像操作其他对象一样简单。 使用`std::...

    C#基础系列:异步编程初探async和await

     了解异步之前,我们先来看看Thread对象的升级版本Task对象:  1、Task对象的前世今生:Task对象是.Net Framework 4.0之后出现的异步编程的一个重要对象。在一定程度上来说,Task对象可以理解Thread对象的一个...

    Java多线程编程深入详解.docx

    线程初探总结 在本章中,我们探讨了多线程编程的基础知识,包括进程和线程的概念、Java对多线程的支持、第一个多线程程序等。下一章,我们将深入探讨多线程编程的高级技术和实践经验。 多线程编程的应用 多线程...

    OS2ATC 2021 第九届开源操作系统年度技术会议PPT合集(45份).zip

    通用机密计算平台技术初探 Python在大数据领域实践和思考 RT-Thread Smart生态之路 云计算与操作系统产业的发展 LAXCUS分布式操作系统-从0到1的实践 Mixed-Criticality System ,Scheduling in seL4 ...

    初探c#初探c#初探c#初探c#初探c#初探c#

    Thread thread1 = new Thread(new ThreadStart( Count)); 其中的 Count 是将要被新线程执行的函数。 b.杀死线程 “杀死线程”就是将一线程斩草除根,为了不白费力气,在杀死一个线程前最好先判断它是否还活着...

    java8源码-tp-practice:千里之行,始于足下

    OAuth2.0初探 学习编写 REST 接口测试用例 学习自定义 validator 学习自定义 filter 学习自定义 interceptor 自定义 aspect 学习 REST 接口多线程编程 Thread#start Thread#stop spring boot 1.5.20.RELEASE spring ...

Global site tag (gtag.js) - Google Analytics