java点滴之让Thread的停止执行的方法

1.Thread.yield()方法作用是:

暂停当前正在执行的线程对象,并执行其他线程。   yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相 同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。   结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果

2.Thread.sleep():

使当前线程睡眠至少多少毫秒(尽管它可能在指定的时间之前被中断)。

3.join()方法:

保证当前线程停止执行,直到该线程所加入的线程完成为止。然而,如果它加入的线程没有存活,则当前线程不需要停止, 在线程myMainThread中调用另一个线程对象myThread的join方法,意味着,myMainThread线程必须等待myThread这个线程指向完毕后,才能往下执行,相当于   此时myThread插入进来,邀请必须全部完成才放行。

如果使用的是join(long millis) ,则参数表示myMainThread线程的最长等待时间,这个数值过后,就不等了

4.几种特殊情况可能使线程离开运行状态:

1、线程的run()方法完成。

2、在对象上调用wait()方法(不是在线程上调用)。

3、线程不能在对象上获得锁定,它正试图运行该对象的方法代码

4、线程调度程序可以决定将当前运行状态移动到可运行状态,以便让另一个线程获得运行机会,而不需要任何理由

java点滴之让Thread的停止执行的方法,布布扣,bubuko.com

时间: 2024-08-05 23:37:22

java点滴之让Thread的停止执行的方法的相关文章

java点滴之InetAddress类和InetSocketAddress的使用

一简介 InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址: InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象: InetAddress add=InetAddress.getByName("BOPZKQZ9SSY5ECY"); 主机名:BOPZKQZ9SSXXXXX,  ip地址:1XX.1XX.2XX.210 InetSocketAddress是SocketAddress的实现子类. 此类实现 IP 套接字地址(I

java点滴之ServerSocket的使用

一概念 serversocket实现了服务端的socket,一个服务端的socket等待从网络上发来的请求,并基于这个请求作出 响应的操作,并作出回应结果. serversocket 建立的是socket的服务端,socket建立的是客户端.最主要构造方法: public ServerSocket():创建一个未绑定任何端口的套接字,通过该方法创建的 ServerSocket 不与任何端口绑定, 接下来还需要通过 bind() 方法与特定端口绑定. 这个默认构造方法的用途是, 允许服务器在绑定到

Java中的线程Thread解析及用途

Java中的线程 进程和线程 在并发性程序中,有两个基本的执行单元:进程和线程.在Java编程语言中,并发编程大多数情况下都是和线程相关.然而,进程也是很重要的. 一个计算机系统中通常都有很多活动的进程和线程.这一点即使是在只有一个执行核心,并且在给定时刻只能执行一个线程的系统中都是存在的.单一核心的处理时间是由整个操作系统的"时间片"特性来在众多的进程和线程中共享的. 现在,计算机系统中有多个处理器或者是有多核处理器的情况越来越普遍.这就大大增强了系统执行多个进程和线程的并发性. 进

Java线程状态及Thread类中的主要方法

要想实现多线程,就必须在主线程中创建新的线程对象. 任何线程一般具有5种状态,即创建,就绪,运行,阻塞,终止. 创建状态: 在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,他已经有了相应的内存空间和其他资源,但还处于不可运行状态. 就绪状态: 新建线程对象后,调用该线程的start()方法可以启动线程.当线程启动时,线程进入就绪状态.此时,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件.-------(运行start()方法只是进入就绪状态,并没有开

java点滴之volatile关键字特性

一 问题引入 JVM把内存分为两层,一层为大的主存,另外一个是工作内存(属于每个线程自己专属的),正常情况下,线程在用到某个变量的值时,都是先取到工作内存中进行处理,然后再写回主存,这样就会带来不同线程变量值不同步的问题. volatile字面意思是易挥发,不稳定,比如100个线程同时访问修改的一个字段值,那么这种值的特性明显和JVM中高速缓存机制不相符,这种值是不适合放在各线程自己的寄存器中的,那会导致100个线程中持有的副本都不一样. 二volatile修饰符作用 当一个变量被声明成 vol

Java并发编程:Thread类的使用

一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解. 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time waiting.waiting.消亡(dead). public enum State { /** * Thread state for a thread which has not

Java中Runnable和Thread的区别

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限. 下面看例子: 代码如下: package org.thread.demo; class MyThread extends Thread{ private String name; public MyThread(String

Java线程示例 - 继承Thread类和实现Runnable接口

进程(Process)和线程(Thread)是程序运行的两个基本单元.Java并发编程更多的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包含多个进程.Java运行时环境就是一个单独的进程,在它内部还包含了作为进程的各种类和程序. 线程 可以将线程看做轻量级的进程.线程存在于进程当中,需要的资源开销较小.同一进程中的线程共享进程的资源. Java多线程 每一个Java引用都只要有一个线程 - 主线程(main thread).虽然后台还运行着许

并发 错误 java.lang.IllegalMonitorStateException: current thread not owner 分析

public class ThreadTest implements Callable<String> { public String call() throws Exception { // TODO Auto-generated method stub wait(10000); return "hello"; } } 调用代码: public static void main(String[] args) { System.out.println("开始启动线