您的位置:

java启动线程,java启动线程的方法

本文目录一览:

JAVA中如何控制线程的启动与暂停

线程的状态表示线程正在进行的活动以及在此时间段内所能完成的任务.线程有创建,可运行,运行中,阻塞,死亡五中状态.一个具有生命的线程,总是处于这五种状态之一:

1.创建状态

使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)

2.可运行状态

使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)

3.运行中状态

Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running).此时,系统真正执行线程的run()方法.

4.阻塞状态

一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked)

5.死亡状态

线程结束后是死亡状态(Dead)

创建线程和启动线程并不相同,在一个线程对新线程的Thread对象调用start()方法之前,这个新线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。这可以让您控制或获取关于已创建的线程的信息,即使线程还没有启动或已经完成了。

通常在构造器中通过start()启动线程并不是好主意。这样做,会把部分构造的对象暴露给新的线程。如果对象拥有一个线程,那么它应该提供一个启动该线程的start()或init()方法,而不是从构造器中启动它。

结束Java线程

Java线程会以以下三种方式之一结束:

Java线程到达其run()方法的末尾。

Java线程抛出一个未捕获到的Exception或Error。

另一个Java线程调用一个弃用的stop()方法。弃用是指这些方法仍然存在,但是您不应该在新代码中使用它们,并且应该尽量从现有代码中除去它们。

当Java程序中的所有线程都完成时,程序就退出了。

java启动一个线程是用run()还是start()?run()和start()的区别?

启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。START()是方法,它调用RUN()方法.而RUN()方法是你必须重写的. run()方法中包含的是线程的主体

在java中启动线程使用run()还是start()?

java线程有两种:一种是继承自Thread类.Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员通过覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是通过调用 Thread 的 start() 函数,该函数再调用 run()。

另一种是实现Runnable接口,此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。

Java线程怎样使用?

多进程是指操作系统能同时运行多个任务(程序),多线程是指在同一程序中有多个顺序流在执行。

在java中创建一个线程有两种方法: 

package com.thread;

public class ThreadTest1 {

    public static void main(String[] args) {

        Runnable1 r = new Runnable1();

        //r.run();并不是线程开启,而是简单的方法调用

        Thread t = new Thread(r);//创建线程

        //t.run(); //如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

        t.start(); //线程开启

        for (int i = 0; i  100; i++) {

            System.out.println("main:"+i);

        }

    }

}

class Runnable1 implements Runnable{

    public void run() {

        for (int i = 0; i  100; i++) {

            System.out.println("Thread-----:"+i);

        }

    }

}