导航:首页 > 编程语言 > java启动一个线程

java启动一个线程

发布时间:2023-05-10 10:21:10

‘壹’ java中有几种方法可以实现一个线程

java中实岩斗蠢现一个线程的方法:
基本的是两种:
第一种是继承Tread class:
class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { //销埋 compute primes larger than minPrime . . . } }
在main里:

PrimeThread p = new PrimeThread(143); p.start();

还有就一种是implements Runnable:
public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); }}

同样用 xxx.start() 可以运行这个线程

这是基本的,还有就是管理一群粗陪线程(threads pool),可以用executor以及executor service, 以上信息都可以在oracle网找到很多例子

‘贰’ java启用另外一个线程设置无超时状态

Java的线程是不允许启动两次的,第二次调用必然会抛出IllegalThreadStateException,这是一种运行时异常,多次调用start被认为是编程错误。

关于线程生命周期的不同状态,在Java 5以后,线程状态被明确定义在其公共内部枚举类型java.lang.Thread.State中,分别是:

新建(NEW),表示线程被创建出来还没真正启动的状态,可以认为它是个Java内部状态。
就绪(RUNNABLE),表示该线程已经在JVM中执行,当然由于执行需要计算资源,它可能是正在运行,也可能还在等待系统分配给它CPU片段,在就绪队列里面排队。 在其他一些分析中,会额外区分一种状态链弊RUNNING,但是从Java API的角度,并不能表示出来。
阻塞(BLOCKED),这个状态和我们前面两讲介绍的同步非常相关,阻塞表示线程在等待Monitor lock。比如,线程试图通过synchronized去获取某个锁,但是其他线程已经独占了,那么当前线程就会处于阻塞状态。
等待(WAITING),表示正在等待其他线程采取某些操作。一个常见的场景是类似生产者消费者模式,发现任务条件尚未满足,就让当前消费者线程等待(wait),另外的生产者线程去准备任务数据,然后通过类似notify等动作,通知消费线程可以继续工作了。Thread.join()也会令线程进入等待状态。
计时等待(TIMED_WAIT),其进入条件和等待状态类似,但是调用的是存在超时条件的方法,比如wait或join等方法的指定超时版本,如下面示例:
public final native void wait(long timeout) throws InterruptedException;

终止(TERMINATED),不管是意外退出还是正常执行结束,线程已经完成使命,终止运行,也有人把这个状态叫作死亡。
在第二次调用start()方法的时候,线程可能处于终止或者其他(非NEW)状态,但是不论如何,都是不可凯绝以再次启动的。

考点分析

今天的问题可以算是个常见的面试热身题目,前面的给出的典型回答,算是对基本状态和简单流转的一个介绍,如果觉得还不够直观,我在下面分析会对比一个状态图进行介绍。总的来说,理解线程对于我们日常开发或者诊断分析,都是不可或缺的基础。

面试棚孙族官可能会以此为契机,从各种不同角度考察你对线程的掌握:

相对理论一些的面试官可以会问你线程到底是什么以及Java底层实现方式。
线程状态的切换,以及和锁等并发工具类的互动。
线程编程时容易踩的坑与建议等。
可以看出,仅仅是一个线程,就有非常多的内容需要掌握。我们选择重点内容,开始进入详细分析。

知识扩展

首先,我们来整体看一下线程是什么?

从操作系统的角度,可以简单认为,线程是系统调度的最小单元,一个进程可以包含多个线程,作为任务的真正运作者,有自己的栈(Stack)、寄存器(Register)、本地存储(Thread Local)等,但是会和进程内其他线程共享文件描述符、虚拟地址空间等。

在具体实现中,线程还分为内核线程、用户线程,Java的线程实现其实是与虚拟机相关的。对于我们最熟悉的Sun/Oracle JDK,其线程也经历了一个演进过程,基本上在Java 1.2之后,JDK已经抛弃了所谓的Green Thread,也就是用户调度的线程,现在的模型是一对一映射到操作系统内核线程。

如果我们来看Thread的源码,你会发现其基本操作逻辑大都是以JNI形式调用的本地代码。

‘叁’ java—for循环里启动的线程要怎么理解

首先类继承Thread或者实现了Runnable接口,程序就知道这是一个线程类,每次new 一个线程类,相当于创建了一个新的线程对象,使用start是启动一个线程,线程处于就绪状态,而run方法属于线程体;
如此在循环体中循环了20次,创建了20个不同的线程,每次都使用了start方法,也就是启动了20个不同的线程;
左上角有我头像,欢迎来学习交流;

‘肆’ 举例说明java中的runnable 接口实现线程,并启动线程的方法.

publicclassRunnableDemo{

publicstaticvoidmain(String[]args)throwsException{
longstatTime=System.currentTimeMillis();

SimpleRunnablerunnable1=newSimpleRunnable();
SimpleRunnablerunnable2=newSimpleRunnable();

//每个Thread(线程)可以接受一个Runnable的实现类做参数
//线程启动时会去运行你实现的run()方法
Threadthread1=newThread(runnable1);
Threadthread2=newThread(runnable2);

thread1.start();//启动线程1
thread2.start();//启动线程2

thread1.join();//等待线程1运行结束
thread2.join();//等待线程2运行结束

longendTime=System.currentTimeMillis();
doubletime=(endTime-statTime)/1000.0;
System.out.println("程序运行时间:"+time+"秒");
//每个任务运行时间都应该是2秒,但是因为你每个任务都用了一个线程去运行
//所以这两个线程是同时(并发)进行的,所以这个程序只需要2秒左右就可以结束
}
}

//写一个实现Runnable接口的类,并实现run()方法
{

@Override
publicvoidrun(){
runTask();//运行你的任务
}

privatevoidrunTask(){
try{
Thread.sleep(2000);//假设你的任务需要两秒完成
}catch(InterruptedExceptionex){
ex.printStackTrace(System.err);
}
}

}

‘伍’ 在java中启动线程使用run()还是start()

启动一个线程用start()方法,使线程所代表的虚拟处理机处于可运行的状态,这意味着它可以有JVM(java虚拟机)来调度和执行,这并不意味着线程就会立即执行。run()方法可以产生必须退出的标志来停止一个线程。

‘陆’ java怎么创建一个线程

Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。可以用如下方式用java中创建一个线程:

Treadthread=newThread();

执行该线程可以调用该线程的start()方法:

thread.start();

编写线程运行时执行的代码有两种方式:一种是创建Thread子类的一个实例并重写run方法,第二种是创建类的时候实现Runnable接口。接下来我们会具体讲解这两种方法:

创建Thread的子类

创建Thread子类的一个实例并重写run方法,run方法会在调用start()方法之后被执行。例子如下:

{
publicvoidrun(){
System.out.println("MyThreadrunning");
}
}

可以用如下方式创建并运行上述Thread子类

MyThreadmyThread=newMyThread();
myTread.start();

一旦线程启动后start方法就会立即返回,而不会等待到run方法执行完毕才返回。就好像run方法是在另外一个cpu上执行一样。当run方法执行后,将会打印出字符串MyThread running。

实现Runnable接口

第二种编写线程执行代码的方式是新建一个实现了java.lang.Runnable接口的类的实例,实例中的方法可以被线程调用。下面给出例子:

{
publicvoidrun(){
System.out.println("MyRunnablerunning");
}
}

为了使线程能够执行run()方法,需要在Thread类的构造函数中传入MyRunnable的实例对象。示例如下:

Threadthread=newThread(newMyRunnable());
thread.start();

当线程运行时,它将会调用实现了Runnable接口的run方法。上例中将会打印出”MyRunnable running”。

‘柒’ 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怎么在需要的地方启动内部类线程

new 这个类得到实例obj,然后 obj.start()
不过你这个程序写的问题比较多。
首先密码你直接比较基本上是大忌, 一般都是比校验码。
而且你button直接实现一个runnable不就完了,何必写一个thread类。

‘玖’ java中有几种方法可以实现一个线程

4种。
1、匿哪滚升名内部类形式。例备改:
Thread t = new Thread(new Runnable(){
//代码
});
t.start();
2、该类实现Runnablef接口。例子:
public class MyThread implements Runnable{
Thread t = new Thread(this);
t.start();
public void run(){ //启动线程自动调用此方法
}
}
3、其他类实现Runnable接口。例子:
public class MainThread{
Thread thread = new Thread(new GetThread());
thread.start();
}
class GetThread implements Runnable{
public void run(){ //启动线程自动调用此方法
}
}
4、内部类实现Runnable接口。例子:
public class ManClass{
Thread t = new Thread(new RunnableClass());
t.start();
class RunnableClass implements Runnable{
public void run(){ //启动线程自动调用此李老方法
}
}
}
原创,望采纳,谢谢。

‘拾’ java中有几种方法可以实现一个线程用什么关键字修饰同步方法

无论何种方式,启动一个线程,就要给它一个名字!这对和明排错诊断系统监控竖缺有帮助。否则诊断问题时,无法直观知唤纤告道某个线程的用途。

阅读全文

与java启动一个线程相关的资料

热点内容
苹果笔记本t2加密芯片怎么打开 浏览:796
安卓如何把手机投屏至电视 浏览:737
方舟编译器现在可提速哪些软件 浏览:58
微信加密为什么是黑屏 浏览:473
android去电状态 浏览:602
苹果13如何加密视频 浏览:813
linuxweblogic缓存 浏览:67
云服务器不同地域 浏览:946
python闹钟怎么打 浏览:686
虚拟主机服务器有什么区别 浏览:833
算法与程序的奥秘章节检测 浏览:377
找pdf 浏览:529
与服务器连接断开如何处理 浏览:833
服务器维修预计十分钟什么意思 浏览:170
黑马程序员主打教学是什么 浏览:41
python九乘法表怎么编写 浏览:974
思维方式pdf 浏览:656
tcc社区app怎么注册 浏览:941
央视网下载加密 浏览:454
命令行访问服务器 浏览:36