java 线程初探

原创 2007年09月12日 17:46:00

本文主要探究主线程和子线程的执行顺序的。

通过2个类模拟,NewThread为子线程,RunnableDemo模拟主线程

public class NewThread implements Runnable ...{

    
/** *//**
     * 
@param args
     
*/

    Thread t;

    
public NewThread() ...{
        t 
= new Thread(this"Child Thread");
        t.start();
        System.out.println(
"start child thread calls start()");
    }


    
public void run() ...{
        
// TODO 自动生成方法存根
        System.out.println("start child thread");
        
for (int i = 7; i > 0; i--...{
            
try ...{
                System.out.println(
"child thread name is=" + t.getName() + "=="
                        
+ i);
                Thread.sleep(
500);
            }
 catch (InterruptedException e) ...{
                e.printStackTrace();
            }

        }

        System.out.println(
"child thread is ended");
    }


}

 

public class RunnableDemo ...{

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) ...{
        
// TODO 自动生成方法存根
        new NewThread();
        
        System.out.println(
"start main thread");

        
for(int i=7;i>0;i--)...{
            
try ...{
                System.out.println(
"main Thread=="+i);
                Thread.sleep(
1000);
            }
 catch (InterruptedException e) ...{
                
// TODO 自动生成 catch 块
                e.printStackTrace();
            }

        }

        System.out.println(
"main thread is ended");
    }


}

结果为

 

start child thread calls start()
start main thread
main Thread
==7
start child thread
child thread name is
=Child Thread==7
child thread name is
=Child Thread==6
main Thread
==6
child thread name is
=Child Thread==5
child thread name is
=Child Thread==4
main Thread
==5
child thread name is
=Child Thread==3
child thread name is
=Child Thread==2
main Thread
==4
child thread name is
=Child Thread==1
child thread is ended
main Thread
==3
main Thread
==2
main Thread
==1
main thread is ended

 

由上测试结果可见,子线程调用了start()后,并不会直接执行run(),而是先回到主线程,待主线程挂起时,才会

会到子线程继续执行。但有个较奇怪的问题是,如果在主线程中Thread.sleep(0),主线程仍然会挂起,而跳到子

线程去。

Java线程池初探

当我们要有很多子任务需要执行的时候,我们不可能每个子任务开一个线程去执行,这样会严重影响程序的性能,这时候就可以用线程池了。线程池可以重用其中的线程,避免线程反复创建和销毁带来的性能开销,而且可以有效...
  • u014285517
  • u014285517
  • 2017年02月16日 21:30
  • 140

java线程初探

在学习java多线程之前需要了解一下相关的概念 并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各...
  • LiC_07093128
  • LiC_07093128
  • 2016年10月09日 13:54
  • 114

Java线程初探

首先复习一下什么是线程和进程。应用程序被加载到内存中并准备运行时,我们就说创建了一个进程。进程是一个具有独立功能的程序关于某个数据集合上一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 而...
  • Xinjie_Wong
  • Xinjie_Wong
  • 2015年05月17日 12:56
  • 209

Java多线程初探——守护线程

一、守护线程概念 Java中将线程分为两类,用户线程和守护线程,其中用户线程就是在前台执行的,用于执行具体操作的线程,比如程序中的主线程、网络连接的子线程等。守护线程是指运行在后台的,为用户线程提供...
  • u011024652
  • u011024652
  • 2016年06月07日 11:13
  • 327

java四种线程池初探

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util...
  • yzj479622672
  • yzj479622672
  • 2017年04月10日 10:49
  • 99

MongoDB初探系列之四:MongoDB与Java共舞

由于版本不同,可能API也有所不同,本次学习用的是3.0版本。 1、使用的mongodb的jdbc驱动版本为:mongo-java-driver-3.0.0.jar 2、本节只是简单介绍JDBC操作,...
  • zhaoguoshuai91
  • zhaoguoshuai91
  • 2015年08月01日 22:13
  • 1203

MongoDB初探系列之一:MongoDB安装及建议配置

想必第一次听说MongoDB的各位小伙伴,一定是听到他的诸多很N的地方才决定来学习一下这个东东的。不管你是出于什么目的开始踏上这段学习之旅,但是同样作为菜鸟的我很乐意和各位一起成长。废话不多说了,各种...
  • zhaoguoshuai91
  • zhaoguoshuai91
  • 2015年07月11日 21:26
  • 972

概率DP入门题

概率dp入门题目
  • u013790563
  • u013790563
  • 2014年10月20日 18:18
  • 752

Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)

一、AMD规范探索 1、AMD规范(即异步模块加载机制) 我们在接触js的时候,一般都是通过各种function来定义一些方法,让它们帮我们做一些事情,一个js可以包含很多个js,而这些functio...
  • eguid_1
  • eguid_1
  • 2016年08月01日 16:29
  • 824

Data Vault初探(七) —— 定期装载_Kettle_中心表

装载中心表作业: 装载产品分类中心表: 装载客户中心表: 装载产品中心表:...
  • wzy0623
  • wzy0623
  • 2015年12月11日 17:29
  • 942
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 线程初探
举报原因:
原因补充:

(最多只允许输入30个字)