JAVA线程控制

  可以通过线程的方法进行基本的线程控制,除了已知的start、run、sleep方法外还有isAlive、currentThread、interrupt方法。

isAlive:该方法用来测试线程是否处于活动状态。线程由start方法启动后,直至被终止之间的任何时刻都处于Alive状态。当处于新建状态和死亡状态时,该方法返回false。

currentThread:该方法是Thread类的的类方法,返回正在使用CPU资源的线程。

interrupt:当线程处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程调用interrupt方法唤醒自己,导致休眠的线程发生InterruptedException异常结束休眠,重新排队等待CPU资源。

class A implements Runnable{
    Thread student,teacher;
    A(){
        teacher=new Thread(this,"王教授");
        student=new Thread(this,"张三");
    }

    public void run(){
        if(Thread.currentThread()==student){
            try{
                System.out.println(student.getName()+"正在睡觉,不听课");
                Thread.sleep(1000*60*60);
            }catch(InterruptedException e){
                System.out.println(student.getName()+"被老师叫醒了");
            }
        }
        else if(Thread.currentThread()==teacher){
            for(int i=1;i<=3;i++){
                System.out.println("上课!");
            }try{
                Thread.sleep(500);
            }catch(InterruptedException e){}
            student.interrupt();
        }
    }
}

public class BasicControlThread{
    public static void main(String args[]){
        A a=new A();
        a.student.start();
        a.teacher.start();
    }
}

此外还有stop和join方法

stop():通过调用线程的实例方法stop()来终止线程,终止后即进入死亡状态,不能再被调度。

join():一个线程在占有CPU资源期间,可以让其他线程调用join()方法和本线程联合。当前线程等待调用该方法线程结束后,再重新排队等待CPU资源,以便恢复执行。

class TV{
    float price;
    String name;
    TV(String name,float price){
        this.price=price;
        this.name=name;
    }
}

class ThreadJoin implements Runnable{
    TV tv;
    Thread customer,tvMaker;
    ThreadJoin(){
        customer=new Thread(this,"顾客");
        tvMaker=new Thread(this,"电视制造商");
    }
    public void run(){
        if(Thread.currentThread()==customer){
            System.out.println(customer.getName()+"等"+tvMaker.getName()+"生产电视机");
            try{
                tvMaker.join();//线程customer开始等待tvMaker结束
            }catch(InterruptedException e){ }
            System.out.println(customer.getName()+"买了一台电视机"+tv.name+"价格:"+tv.price);
        }
        else if(Thread.currentThread()==tvMaker){
            System.out.println(tvMaker.getName()+"开始生产电视机...");
            try{
                tvMaker.sleep(2000);
            }catch(InterruptedException e){ }
            tv=new TV("长虹牌",4500);
            System.out.println(tvMaker.getName()+"生产完毕!!!");
        }
    }
}

public class JoinThread{
    public static void main(String args[]){
        ThreadJoin th=new ThreadJoin();
        th.customer.start();
        th.tvMaker.start();
    }
}

时间: 2024-10-12 03:23:40

JAVA线程控制的相关文章

Java 线程控制

一.线程控制 和线程相关的操作都定义在Thread类中,但在运行时可以获得线程执行环境的信息.比如查看可用的处理器数目(这也行?): Runtime.getRuntime().availableProcessors(): 线程还提供了一些方法用于对线程进行便捷的控制.22222 1.线程睡眠 静态方法Thread.sleep(long millis)强制正在执行的线程暂停进入睡眠状态,进入阻塞状态.睡眠结束后,线程转为就绪状态. /*自定义的睡眠时间单位为毫秒*/ /*必须要进行异常处理*/ t

java线程控制、状态同步、volatile、Thread.interupt以及ConcurrentLinkedQueue

在有些严格的系统中,我们需要做到干净的停止线程并清理相关状态.涉及到这个主题会带出很多的相关点,简单的总结如下: 我们知道,在java中,有一个volatile关键字,其官方说明(https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html)为: Using volatile variables reduces the risk of memory consistency errors, because any

java线程控制安全

synchronized()在线程运行的时候,有时会出现线程安全问题例如:买票程序,有可能会出现不同窗口买同一张编号的票 运行如下代码: public class runable implements Runnable { //此处定义变量是一个对象的变量,run()函数调用的时候不同的线程调用 int i=1; @Override public void run() { while(true){ //输出当前线程名字和票数 System.out.println(Thread.currentTh

Java中的线程状态转换和线程控制常用方法

Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的时间片到了, 又回到就绪状态, 继续排队等候. 线程控制的基本方法: isAlive(): 判断线程是否还活着, start 之后,终止之前都是活的; getPriority(): 获得线程的优先级数值; setPriority(): 设置线程的优先级数值(线程室友优先级别的);   Thread.

漫谈并发编程(二):java线程的创建与基本控制

java线程的创建 定义任务 在java中使用任务这个名词来表示一个线程控制流的代码段,用Runnable接口来标记一个任务,该接口的run方法为线程执行的代码段. public class LiftOff implements Runnable { protected int countDown = 10; private static int taskCount = 0; private final int id = taskCount++; public void run() { whil

java线程池的自带监控,线程池返回值的控制

当使用java线程池的时候,返回值类型用future<T> 来接收,比如: Future<String> future = fixedThreadPool.submit(new Thread());返回的结果必须由线程执行完毕后才会返回,我们可以利用这一点进行线程堵塞,监控线程的结束时间. package com.test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.

java 线程详解

5月7号  周末看了一下线程方面的内容 ,边看视频边看书还附带着参考了很多人的博客,一天的收获,写下来整理一下:感觉收获还是挺多的:过段时间可能看完java  这几大块要去看一下关于spring boot  的内容顺便  也整理一下:附上我参考的 几本书: 关于java  线程,首先要了解一下线程和进程之间的关系.区别以及他们之间的概念: 首先是线程: 什么是线程? 线程是在程序执行过程中能够执行部分代码的一个执行单元,也看看做是一个轻量级的进程:线程是程序内的程序控制流只能使用程序内分配给程序

Java线程使用大全

1.线程实现 1.Thread类 构造方法: 案例代码: public class Ex10_1_CaseThread extends Thread {// 创建一个类继承(extend)Thread类 String studentName; public Ex10_1_CaseThread(String studentName) {// 定义类的构造函数,传递参数 System.out.println(studentName + "申请访问服务器"); this.studentNam

java线程详细介绍

目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1