-
JAVA中Thread类的常用方法
2019-09-17 16:51:38Thread类的常用方法: 1.start():启动线程并执行相应的run()方法 2.run():子线程要执行的代码放入run()方法中 3.currentThread():获取当前的线程 //静态方法 4.getName():获取子线程的名称 5.setName():设置子线程的...Thread类的常用方法:
1.start():启动线程并执行相应的run()方法
2.run():子线程要执行的代码放入run()方法中
3.currentThread():获取当前的线程 //静态方法
4.getName():获取子线程的名称
5.setName():设置子线程的名称
6.yield():调用此方法的线程释放当前CPU的执行权
7.join():在子线程1中调用线程2的join()方法,表示当执行到此方法时,线程1停止执行(阻塞)
8.sleep(long l):显示让当前线程睡眠(毫秒 1s = 1000ms)
9.isAlive():判断当前线程是否存活
10.getPriority():获取优先级,默认是5,最小是1,最大是10
11.setPriority():改变线程的优先级
12.线程通信的方法:
wait():等待
notify():唤醒等待的线程
notifyAll():唤醒所有等待的线程 -
Java的Thread类的常用方法
2018-10-03 10:32:59 -
Java中Thread类的方法简介
2018-06-05 17:37:48如果直接调用run()方法,该方法也会执行,但会被当做一个普通的方法,在当前线程中顺序执行;而如果使用start()方法,则会创建一个新的线程执行run()方法。 2.线程中断 public void interrupt(); public boole.....1.新建线程
Thread t1 = new Thread(); t1.start();
新建线程,应该调用start()方法启动线程;如果直接调用run()方法,该方法也会执行,但会被当做一个普通的方法,在当前线程中顺序执行;而如果使用start()方法,则会创建一个新的线程执行run()方法。
2.线程中断
public void interrupt(); public boolean isInterrupted(); public static boolean interrupted();
三个方法很相似,线程中断只是通知目标线程有人希望你退出,而并不是使目标线程退出。
第一个方法是通知目标线程中断,即设置目标线称的中断标志位;
第二个方法判断当前线程是否被中断,如果被中断(即中断标志位被设置),则返回true,否则返回false;
第三个方法判断当前线程的中断状态,并清除该线程的中断标志位(也就意味着,如果连续调用两次该方法,并且中间没有再次设置中断标志位,第二次会返回false,因为中断标志位已经被清除)。public static native void sleep(long millis) throws InterruptedException;
sleep()方法会将当前线程休眠若干ms,如果在休眠期间被调用interrupt()方法,则会抛出InterruptedException异常。如下:
public class TestThread implements Runnable{ @Override public void run() { while(true) { if(Thread.currentThread().isInterrupted()){ //如果当前线程已经被设置了中断标志位,则返回true System.out.println("Interrupted"); break; } try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { System.out.println("Interruted when sleep!"); Thread.currentThread().interrupt(); //Thread.sleep()方法由于中断而抛出异常,此时,它会清除中断标记; } Thread.yield(); } } public static void main(String[] args){ Thread t1 = new Thread(new TestThread()); t1.start(); t1.interrupt(); //设置目标线程的中断标志位,中断标志位表示当前线程已经被中断了 } }
3.等待(wait)和通知(notify)
public final void wait() throws InterruptedException; public final native void notify(); public final native void notifyAll();
obj.wait()是设置当前线程在该对象上等待,直到有线程调用obj.notify()方法(或notifyAll()方法)。当调用wait()方法后,该线程会进入一个等待队列,等待队列中可能有多个线程,notify()会随机唤醒其中一个线程,而notifyAll()会唤醒所有线程。
wait()和notify()方法必须在sychronized代码块中,调用这些方法时都需要先获得目标对象的一个监视器,然后调用这些方法时会释放监视器
与sleep不同的是,sleep()会一直占有所持有的锁,而wait()会释放锁。4.等待线程(join)和谦让(yield)
public final void join() throws InterruptedException; public static native void yield();
如果一个线程的执行需要另一个线程的参与(比如当前线程执行需要另一个线程执行完毕才能继续执行),这时候可以调用join()方法。t1.join()方法表示等待线程t1执行完毕之后,当前线程再继续执行。当然也可以给join()设置时间参数。
注:join()的本质是让调用线程wait()在当前线程对象实例上,其部分源码如下:while (isAlive()) { wait(0); }
当线程执行完毕后,它会让被等待的线程在退出前调用notifyAll()通知所有等待的线程继续执行。因此不要在Thread对象实例上使用类似wait()或者notify()等方法。
yield()方法是使当前线程让出CPU,但该线程会再次抢夺CPU。 -
java中Thread类的join方法
2017-11-13 13:21:03那么我们如何实现让线程T1,T2,T3,在T1执行完成后才执行T2,T2执行完成后才执行T3,也就是线程的串行化,通过Thread类的join方法就可以实现。 join方法:将该线程加入当前线程,当前线程等待加入线程执行完成...单核cpu运行多线程时底层实现原理是多个线程间切换,由于cpu的处理速度很快,看上去像多个线程同时运行。那么我们如何实现让线程T1,T2,T3,在T1执行完成后才执行T2,T2执行完成后才执行T3,也就是线程的串行化,通过Thread类的join方法就可以实现。join方法:将该线程加入当前线程,当前线程等待加入线程执行完成才继续执行。例子:public class ThreadJoinTest implements Runnable {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(new ThreadJoinTest());thread.start();thread.join();System.out.println("主线程结束");}@Overridepublic void run() {System.out.println("子线程开始");for(int i = 0; i < 5; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(i);}System.out.println("子线程结束");}}执行结果:join(long millis)方法:将该线程加班当前线程,当前线程等待加入线程millis时间,当达到millis时间后不管加入线程是否完成,当前线程都继续执行,若加入线程在小于millis时间执行完成,则当前线程等待时间等于加入线程的执行时间。例子:public class ThreadJoinTest implements Runnable {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(new ThreadJoinTest());thread.start();thread.join(2000);System.out.println("主线程结束");}@Overridepublic void run() {System.out.println("子线程开始");for(int i = 0; i < 5; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(i);}System.out.println("子线程结束");}}执行结果: -
java中Thread类的join()方法
2014-10-22 15:55:34java中Thread类的join()方法 分类: 学习笔记 java 多线程2012-03-10 11:45 1650人阅读 评论(0) 收藏 举报 threadjoinjavastringclass Thread类中有一个join()方法,在一个线程中启动另外一个... -
JAVA的Thread类
2013-05-03 11:13:36java.lang.Thread java.lang.Runnable 要启动一个新的线程,必须先建立一个对象,通过调用start()方法才能启动,因为start()方法定义咋thread类内,启动新...thread类常用的方法如下 public class Thread extend -
【Java】Thread类中的join()方法原理
2018-05-09 18:34:09join()是Thread类的一个方法。根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this thread to die. join()方法的作用,是等待这个线程结束;但显然,这样的定义并不清晰... -
Java中Thread类的sleep和wait方法的使用与区别?
2020-01-02 22:48:15首先,“sleep是Thread类的方法,wait是Object类中定义的方法”。尽管这两个方法都会影响线程的执行行为,但是本质上是有区别的。 锁行为区别: sleep方法是线程类Thread的静态方法,让调用线程进入睡眠状态,让出... -
Java.lang.Thread类的sleep方法导致Java线程InterruptedException异常
2018-01-03 18:49:00当一个方法后面声明可能会抛出InterruptedException异常时,说明该方法是可能会花一点时间,但是可以取消的方法...2.Java.lang.Thread类的sleep方法。 3.Java.lang.Thread类的join方法。 这里我们只看sleep方法。 -
Java中Thread类不常用的一些方法
2015-04-15 09:54:45该方法打印出当前线程栈的一些基本信息,比如下面的一些信息 java.lang.Exception: Stack trace at java.lang.Thread.dumpStack(Thread.java:1344) at com.example.Test.say(Test.java:16) at c -
Java中Thread类的start()方法和run()方法
2017-07-05 18:29:17我们知道在Java中可以通过继承一个Thread类来实现一个线程类,继承以后,需要重载run()方法,但是在启动线程的时候则又是用start()方法,这个是几个意思,启动直接用run()不行么,我们试一下。首先还是用start()方法... -
java线程类Thread中的方法
2017-06-14 21:54:00线程类Thread中的方法 1)currentThread(): public static Thread currentThread() 说明:返回当前正在执行的线程对象的引用,即返回调用当前代码的线程对象。 2) join(): public final void join... -
JAVA线程-Thread类的方法
2016-05-17 15:50:15static Thread currentThread() 返回对当前正在执行的线程对象的引用。 long getId()返回该线程的标识符。 String getName()返回该线程的名称。 int getPriority() 返回线程的优先级。 void interrupt() 中断... -
Java Thread 类中的方法和线程名称
2017-08-17 15:44:392 覆盖Thread类中的run方法 3 直接创建Thread的子类对象创建线程 4 调用start方法开启线程并调用线程任务的run方法执行 可以通过Thread的getName获取线程的名称 Thread-编号(从0开始) 一创建对象时就有编号 主线程... -
java Thread 类的几种方法
2017-05-20 15:56:58* 对于java来说只要还有一个前台线程在运行,这个进程就不结束,如果一个进程 * 只有后台线程,这个进程就会结束 */ package xian_cheng; public class Example06 { public static void main(String[] args) {... -
Java Thread类主要方法详解
2018-09-13 00:48:41在java中,谈到线程,必然少不了Thread类。线程是比进程更轻量级的调度执行单位。...主流操作系统(Windows, Linux)都提供了线程的实现,Java则提供了在不同硬件和操作系统下对线程的统一处理,Thread类则是... -
java中Thread类方法介绍
2016-11-29 17:13:05方法摘要 static int activeCount() 返回当前线程的线程组中活动线程的数目。 void checkAccess() 判定当前运行的线程是否有权修改该线程。 int countStackFrames() 已过时。 该调用的...
-
CGI-610用户手册(修订202008).pdf
-
虚拟机上的常用功能管理
-
eclipse.zip
-
什么是Bash、什么是shell?
-
360°全方面性能调优.pdf
-
Oracle的时间溯回语句
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
PPTP_NNN 服务生产环境实战教程
-
sky-nik.github.io:https:sky-nik.github.io-源码
-
对于“新基建”这块大蛋糕,做智慧灯杆的企业需要琢磨怎么去吃?
-
Java入门篇3
-
机器学习算法介绍
-
AWC-源码
-
Z8700平台通用驱动_X64
-
想要酷炫大气的网页设计?这样做超吸睛
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
ROS学习(五):package.xml 文件
-
国产系统 统信uos 20 飞腾CPU 编译通过 clang10 源码
-
区块链应用开发实战(Go语言方向)
-
C++MFC开发远程控制软件教程(VS2013)