java多线程,显示结果有疑问

问题描述

java多线程,显示结果有疑问

package com.ii11;
public class ThreadDemo2 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    TestThread t = new TestThread();
    new Thread(t).start();
    for(int i=0; i<3; i++)
    {
        System.out.println("main 线程在运行");
    }
}

}

class TestThread implements Runnable
{
public void run()
{
for(int i=0; i<3; i++)
System.out.println("Thread 线程在运行");
}
}
没有实现多线程效果,只显示如下结果为何


main 线程在运行
main 线程在运行
main 线程在运行
Thread 线程在运行
Thread 线程在运行
Thread 线程在运行


解决方案

线程之间的执行顺序不是固定的,主线程的执行速度在你 new 的线程执行之前也是可能的。
我在代码new Thread(t).start();的下面让主线程休眠了一毫秒Thread.sleep(1);
执行结果就是这样了:
Thread 线程在运行
Thread 线程在运行
Thread 线程在运行
main 线程在运行
main 线程在运行
main 线程在运行
楼主可以试一下,共同学习。

解决方案二:

想看出来效果,多输出几句,主线程和测试线程加上sleep(1000)休眠一秒试试

解决方案三:

从楼主的输出看出来,启动一个线程开销还是蛮大的。

解决方案四:

你把两个for循环的循环次数都设置成10000试试看。

时间: 2024-11-01 01:57:08

java多线程,显示结果有疑问的相关文章

java多线程编程实现下雪效果_java

没有直接采用继承Thread类或者继承Runnable的接口来实现多线程,而是使用了匿名内部类. 要导入的类: import javax.swing.*; import java.awt.*; 1.定义SowPanel类,继承JPanel类,这个类有两个整型数组成员,用来保存雪花起始位置.在构造函数中为数组赋初值:重写父类的paint()方法:定义一个启动多线程的startSnow()方法. class SnowPanel extends JPanel { //定义整型数组,存储雪花坐标 pri

深入浅出Java多线程(1)-方法join

对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于 Java语言的产品.本文将深入浅出的表述Java多线程的知识点,在后续的系列里 将侧重于Java5由Doug Lea教授提供的Concurrent并行包的设计思想以及具体实 现与应用. 如何才能深入浅出呢,我的理解是带着问题,而不是泛泛的看.所以该系列 基本以解决问题为主,当然我也非常希望读者能够提出更好的解决问题的方案以 及提出更多的问题.由于水平有限,如果有什么错误之处,请大家提出,共同讨 论,总之,我希望通过该系列我们

JAVA学习(九):JAVA多线程编程

本文详细解释JAVA多线程编程,首先对进程和线程做了区别,其次介绍线程的两种实现方式,即继承Thread类和实现Runnable接口,然后讨论了线程常用的方法和优先级,最后介绍了线程的同步和死锁以及线程的生命周期.   1.进程与线程的区别与联系 进程:是应用程序的运行实例,是应用程序的一次动态执行.进程是由进程控制块.程序段和数据段3部分组成的.进程是操作系统进行资源分配的单位. 线程:是进程中的一个实体,其本身依靠程序进行运行,是程序中的顺序控制流,只能使用分配给程序的资源和环境.线程是被系

Java多线程与并发库高级应用

想快速精通多线程?看这里  http://blog.chinaunix.net/uid-540802-id-4431193.html 什么是线程         线程,是程序执行流的最小单元.是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源,一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行.在单个程序中同时运行多个线程完成不同的工作,称为多线程.当自己想

Java多线程知识小抄集(三)

本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为"小抄集".本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆. 51. SimpleDateFormat非线程安全 当多个线程共享一个SimpleDateFormat实例的时候,就会出现难以预料的异常. 主要原因是parse()方法使用calendar来生成返回的Date实例,而每次parse之前,都会把calendar里的相关属性清除掉.问题是这个calendar是

《JAVA多线程编程实战指南》之Two-phase Termination(两阶段终止)模式

本文是<JAVA多线程编程实战指南>的样章,感谢作者授权并发网(ifeve.com)发表此文.感谢demochen整理此文. 5.1Two-phase Termination模式简介 停止线程是一个目标简单而实现却不那么简单的任务.首先,Java没有提供直接的API用于停止线程.此外,停止线程还有一些额外的细节需要考虑,如停止的线程处于阻塞(如等待锁)或者等待状态(等待其他线程),尚有未处理完的任务等. Two-phase Termination模式通过将停止线程这个动作分解为准备阶段和执行阶

java多线程问题,java 编程思想书中的例子

问题描述 java多线程问题,java 编程思想书中的例子 在看java编程思想书中的多线程一节,书中对wait,notify,notifyall举了一个例子,模拟给汽车涂蜡和抛光的过程, 因为抛光任务在涂蜡之前是不能尽兴的,反之,涂蜡任务在涂另外一层蜡之前,必须要等抛光任务结束.代码如下: 显示一个汽车类: class Car{ private boolean wanOn=false; public synchronized void waxed(){ waxOn=true; notifyAl

深入探讨Java多线程中的volatile变量_java

volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性. 什么是线程的可见性: 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility).互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据.可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 -- 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前

Java多线程原理及ThreadLocal多线程实例详解

一.线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是程序的一个动态执行过程,是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 Windows系统中,一个运行的exe就是一个进程.线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存."同时"执行是人的感觉,在线程之间实际上轮换执行. 二.Java