`
badpie
  • 浏览: 5550 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java Code之线程(一)

阅读更多

一台电脑上,开一个迅雷在下载游戏,还挂着QQ和一个朋友聊天,这个迅雷和QQ是两个不相关的程序,他们之间没有相互影响,至少看起来是没有关联的。你关闭了迅雷,QQ不会退出。这里的迅雷和QQ是属于不同的进程。进程的运行和调度会消耗很多资源。你的电脑能同时开200个应用程序么?

迅雷里有10个电影在同时下载,他们之间也没有太大的影响,每个下载任务独自运行,不会因为其中一个资源下载失败导致另外的下载失败,取消了其中的一个下载任务,其它的下载任务也不会受到影响。这里的迅雷是一个进程,里面的这10个下载任务就是属于迅雷这个进程的10个线程。

 

下面来看看Java提供了什么方式来操作进程和线程。

每一个JVM实例是一个进程。怎么理解?

package com.iteye.badpie.javacode.thread;

public class Main {

    public static void main(String[] args) {
        System.out.println("这是一个JVM进程");
    }

}

由一个main方法开始的一个java程序就是一个进程。在Android中表现为一个apk。实际上在java中所有的代码都不是直接在进程中运行的,JVM在启动时会首先给当前进程创建一个线程,然后让代码在这个线程中开始执行,比如这里的main方法就是在这个线程中运行的,这个线程通常称之为主线程,在Android中也有一个类似的称呼叫做UI线程。Android中的Activity,Service,Broadcast等等都是在UI线程中运行的,如果在UI线程的一次调度过程中消耗的时间超过5s,Android就会抛出一个异常,叫做ANR异常(Application Not Response,应用程序无响应)。

 

每一个线程都有一个名字,下面来看看JVM的主线程的名字叫什么。

package com.iteye.badpie.javacode.thread;

public class Main {

    public static void main(String[] args) {
        System.out.println("这实际上是属于当前JVM进程的主线程中,代码不可能直接写在进程中。");
        String name = Thread.currentThread().getName();
        System.out.println(String.format("当前线程(主线程)的名字:%s", name));
    }

}

执行结果如下:

这实际上是属于当前JVM进程的主线程中,代码不可能直接写在进程中。
当前线程(主线程)的名字:main

 看得出来,JVM默认给的主线程的名字叫做main,大约也是这个线程被称之为主线程的原因吧。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics