Thread多线程stopSleep顺序问题

今天呢,学习了javase多线程,里面的睡眠sleep问题有点困扰:

public class Thread_06_stopSleep{
    public static void main(String[] args)throws Exception{
        Processor p = new Processor();
        Thread t = new Thread(p);
        t.start();//
        Thread.sleep(5000);//Thread:代表了当前代码所在的类那个线程,main()
        for(int i=0; i < 10; ++i){
            System.out.println( Thread.currentThread().getName()+"----->" + i );
        }
        p.run = false;
    }
}

class Processor implements Runnable{
    boolean run = true;
    public void run(){
        for(int i=0; i < 10; ++i){
            if (run) {//如果run为假的话.sleep就不执行了
                try{
                    Thread.sleep(1000);
                }catch(Exception e){
                    e.printStackTrace();
                }
                System.out.println( Thread.currentThread().getName()+"----->" + i );
            }else{
                System.out.println( "sleep,被唤醒了" );
                return; //终止函数运行,这里也就是杀死当前线程
            }
        }
    }

但是为什么输出完以后,为什么下面还有一次为真?效果图如下:

为什么还有第五次,不是第五次的时候就已经将false传入了么,求高手指点迷津!!

对了,还有我因为也是初学,发的文章也没有什么技术含量,你们要转载就随便转,但是请把我的链接加上,OK?

时间: 2024-10-14 04:24:19

Thread多线程stopSleep顺序问题的相关文章

如何控制多线程执行顺序

package com.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 如何控制多线程执行顺序 * 1.join方法,让主线程等待子线程执行完后再执行 * 2.newSingleThreadExecutor,创建执行单个任务的线程池执行.保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 */ public class ThreadFIF

Boost::Thread 多线程的基础知识

Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#include <boost/thread.hpp> 线程定义boost::thread 类是负责启动和管理线程.每个boost::thread对象代表一个单独的执行线程,是不可拷贝的.由于它是可以被移动到,所以它们可以被保存到会改变大小的容器中,并且从函数返回.这使得线程创建的详细信息可以被封装到一个函

Thread多线程速查手册

常用概念线程安全停止线程守护线程多线程通讯锁Synchornized悲观锁乐观锁共享锁/独占锁读写锁的机制死锁LockReentrantLockConditionCountDownLatchCyclicBarrier信号量SemaphoreThreadLocal高并发线程安全与不安全的类不安全的spring与多线程线程池介绍线程池的优点线程池工作过程常用方法基本使用阻塞队列 toc 常用概念 线程状态 新建状态.就绪状态.运行状态.阻塞状态及死亡状态. 新建状态: 当用new操作符创建一个线程时

多线程练习--顺序打印ABC十次

这是迅雷的一道面试题,顺序打印ABC十次. public class TenABC { public static void main(String[] args) { final BlockingQueue queue = new ArrayBlockingQueue(30); for (int i = 0; i < 10; i++) { try { queue.put("A"); queue.put("B"); queue.put("C"

C++11 Thread多线程的学习心得与问题

C++11 ,封装了thread的多线程的类,这样对多线程的使用更加方便. 多线程的原理我不加赘述,可以参看操作系统等参考书. 多线程代码可以最大化利用计算机性能资源,提高代码的运行效率,是常用优化方法. 我不是C++大神,初学阶段的菜鸟而已,很多问题我还是不理解当中的原理,写这篇博客的原因,也是记录自己的学习心得和思路,供自己日后自己思考. 首先从简单的问题入手,如何写一个多线程的C++代码? #include<iostream> #include<thread> void fu

Java Thread 多线程 介绍

1.线程概述 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程. 当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程. 2.线程和进程 几乎所有的操作系统都有进程的概念,所有运行中的任务通常对应一条进程.当一个程序进入内存运行,就是一个进程了. 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位. 进程特征: A.独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自

thread 多线程

一.为什么重写mythread类里写了run()在main里没有调用,而调用了没有写的start() start()让run()在新线程里面运行.你直接调用run()就是在当前线程运行了. start()调用_thread的start_new_thread去运行一个bootstrap方法,在里面做一些准备工作后会调用run() 1.简单的多线程 from time import sleep, ctime import threading def fab(x): sleep(5) print 'f

新手浅谈Task异步编程和Thread多线程编程

初学Task的时候上网搜索,看到很多文章的标题都是task取代thread等等相关,我也一直以为task和thread是一类,其实task是.net4.0提出的异步编程,在之前.net1.0有delegete.beginInoke(XXXX),还有.net2.0中的EAP,在最新的4.5中又有async.await这种新的异步编程.而Thread和Threadpool则是多线程编程. 但是Task也是把任务推到线程池中 1 static void Main(string[] args) 2 {

python thread 多线程

thread 模块在python3中改为_thread,网上的各种帖子都说不建议新手使用thread,好吃不好吃总得尝尝看. 1 import _thread 2 3 def print_num(): 4 for i in range(100): 5 print(i) 6 7 _thread.start_new_thread(print_num,()) 8 _thread.start_new_thread(print_num,()) 9 _thread.start_new_thread(prin