java里thread是什么(JAVA中这个Thread.currentThread是什么意思)
各位老铁们好,相信很多人对java里thread是什么都不是特别的了解,因此呢,今天就来为大家分享下关于java里thread是什么以及JAVA中这个Thread.currentThread是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
java 多线程是什么
线程定义比较抽象,简单的说就是一个代码执行流。许多执行流可以混合在一起由CPU调度。线程是允许各种任务交互执行的方式。
Java的线程在操作系统的实现模式依系统不同而不同,可能是系统级别的进程或线程,但对于程序员来说并没有影响。
任务交互的一个好处是增加程序响应。如一个界面程序执行一段耗时的数据库查询,使用单独的线程可以让界面依然响应用户的其他输入,而单线程只能等待查询结束再处理。
JVM以及操作系统会优先处理优先级别高的线程,但不代表这些线程一定会先完成。设定优先级只能建议系统更快的处理,而不能强制。
另外,在运行时,并没有按照函数分界,而是按照机器码/汇编码分界。也就是说不保证任何一段代码是被完整而不打断的执行的(除非你已经使用同步手段)。正由于如此,各种线程同步的方法应运而生。
java中thread.sleep是什么意思
sleep()方法是Thread类里面的,主要的意义就是让当前线程停止执行,让出cpu给其他的线程,但是不会释放对象锁资源以及监控的状态,当指定的时间到了之后又会自动恢复运行状态。
wait()方法是Object类里面的,主要的意义就是让线程放弃当前的对象的锁,进入等待此对象的等待锁定池,只有针对此对象调动notify方法后本线程才能够进入对象锁定池准备获取对象锁进入运行状态。
什么是线程有什么用 讲得通俗点
1、线程的定义
线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。
线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。
线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU调度的一个基本单位。
2、线程的作用:
线程的作用很多,举个最为典型的例子:
当需要在网络上放一个服务端,一个客户端访问时,就会新建一个线程处理这个客户端的事务,这样的话只要不断新建线程就可以处理多个用户的请求了。
扩展资料
线程的五种状态:
1、新生状态(New)
当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,此时该线程处于新生状态。此时线程不是活着的(not alive);
2、就绪状态(Runnable)
通过调用线程实例的start()方法来启动线程使线程进入就绪状态;但还没有被分配到CPU,处于线程就绪队列;此时线程是活着的(alive)。
3、运行状态(Running)
一旦获取CPU,线程就进入运行状态,线程的run()方法才开始被执行,如果在给定的时间内没有执行结束,就会被系统给换下来回到线程的就绪状态,此时线程是活着的(alive)。
4、阻塞状态(Blocked)
通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞状态,此时线程是活着的(alive)。
5、死亡状态(Dead)
当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡状态。处于Dead状态调用start()方法,会出现异常。
参考资料:百度百科-线程
JAVA中这个Thread.currentThread是什么意思
当年学的时候,我也纳闷,为什么获取当前线程需要调用Thread类的静态方法去获取,为毛不直接用对象操作就行了啊?
上代码先:
class MyThread extends Thread{
@Override
public void run(){
try{
Thread.sleep(500);
Thread t= Thread.currentThread();
System.out.println("当前线程名字:"+ t.getName()+"当前线程的优先级别为:"+ t.getPriority()+" ID:"+ t.getId());
// System.out.println("当前线程名字:"+ this.getName()+"当前线程的优先级别为:"+ this.getPriority()+" ID:"+ this.getId());
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
public class TestDemo{
public static void main(String[] args){
MyThread mt= new MyThread();
new Thread(mt,"Name1").start();
new Thread(mt,"Name2").start();
new Thread(mt).start();
System.out.println(Thread.currentThread().getName());// main主方法
}
}
看上面,貌似你会用Thread.currentThread()。
但是问题来了,为毛不直接用对象操作就行了啊?
把run()方法里的Thread.currentThread()直接替换成 this不就行了(替换成注释掉的代码),直接用对象多省事啊。
不知你们学习时有没有过这样的疑惑,因为我确实想不到哪里需要调用到这个线程而拿不到这个线程的情况。
可是新的问题又出现了,你试试看运行上面这段代码,this和Thread.currentThread()输出的内容是否相同?
运
行比较一下吧。没想到吧,差别明显啊!所以题外插一句:如果调用isInterrupted返回true,this就是当前线程对象,此时
Thread.currentThread()与this表示同一对象。否则,就必须使用Thread.currentThread()获取当前线程。
而且既然是使用到了多线程,多半情况下都不会知道系统当前执行的是哪块线程,所以你需要调用Thread.currentThread()方法来获取系统当前正在执行的一条线程,然后才可以对这个线程进行其他操作,就是这个意思。
文章到此结束,如果本次分享的java里thread是什么和JAVA中这个Thread.currentThread是什么意思的问题解决了您的问题,那么我们由衷的感到高兴!