java多线程快速入门(十九)

如何停止线程

  1、使用stop方法强行终止线程(这个方法不推荐使用,可能会出现业务操作未执行完,线程中断了)

package com.cppdy;

class MyThread15 extends Thread{

    @Override
    public synchronized void run() {
        while(true) {
            try {
                wait();
            } catch (Exception e) {

            }
            //如果这里有非常重要的代码块,是不是就出现问题了
            System.out.println("Thread run------");
        }
    }

}

public class ThreadDemo15 {

    public static void main(String[] args) throws Exception {
        MyThread15 mt = new MyThread15();
        Thread thread1 = new Thread(mt);
        Thread thread2 = new Thread(mt);
        thread1.start();
        thread2.start();
        int count=0;
        while(true) {
            System.out.println("Main run------");
            Thread.sleep(100);
            if(count==30) {
                thread1.stop();
                thread2.stop();
                break;
            }
            count++;
        }
    }

}

  2、使用interrupt方法中断线程(将业务操作执行完后再中断线程)

package com.cppdy;

class MyThread15 extends Thread{

    @Override
    public synchronized void run() {
        while(true) {
            try {
                wait();
            } catch (Exception e) {

            }
            //如果这里有非常重要的代码块,是不是就出现问题了
            System.out.println("Thread run------");
        }
    }

}

public class ThreadDemo15 {

    public static void main(String[] args) throws Exception {
        MyThread15 mt = new MyThread15();
        Thread thread1 = new Thread(mt);
        Thread thread2 = new Thread(mt);
        thread1.start();
        thread2.start();
        int count=0;
        while(true) {
            System.out.println("Main run------");
            Thread.sleep(100);
            if(count==30) {
                thread1.interrupt();
                thread2.interrupt();
                break;
            }
            count++;
        }
    }

}

  3、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止

package com.cppdy;

class MyThread15 extends Thread{

    public volatile boolean flag=true;

    @Override
    public synchronized void run() {
        while(flag) {
            try {

            } catch (Exception e) {
                setFlag(flag);
            }
            System.out.println("Thread run------");
        }
    }

    public void setFlag(boolean flag) {
        this.flag=flag;
    }

}

public class ThreadDemo15 {

    public static void main(String[] args) throws Exception {
        MyThread15 mt = new MyThread15();
        Thread thread1 = new Thread(mt);
        Thread thread2 = new Thread(mt);
        thread1.start();
        thread2.start();
        int count=0;
        while(true) {
            System.out.println("Main run------");
            Thread.sleep(100);
            if(count==30) {
                mt.setFlag(false);
                break;
            }
            count++;
        }
    }

}

原文地址:https://www.cnblogs.com/cppdy/p/10017595.html

时间: 2024-08-30 06:40:22

java多线程快速入门(十九)的相关文章

java 多线程 快速入门

------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有多个线程  什么是线程? 线程就是独立的运行一条执行路径 一个独立的执行单元 , 一个执行流程 为什么要使用多线程? 多线程提高程序效率 , 使用多线程 , 每个线程互补影响 2.创建线程的方式有哪些 1.使用继承 Thread类方式 如下示例 结果 1.继承 Thread 类 class Crea

java多线程快速入门(十五)

使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { //volatile让多个线程刷新falg的值 public volatile boolean falg = true; @Override public void run() { System.out.println("子线程开始执行啦"); while (falg) { } System

java多线程快速入门(二十)

1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 package com.cppdy; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class ThreadDemo16 { public static void main(S

java多线程快速入门(六)

多线程应用实例(批量发送短信) 1.创建实体类 package com.cppdy; public class UserEntity { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(Strin

JavaWeb之Ajax快速入门(十九)

AJAX 1. AJAX简介 1. AJax是什么 允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做AJax,AJax不是新的编程语言是多种技术的结合形成一门新技术 AJAX = DHTML (HTML.CSS.JavaScript ) + XMLHttpRequest对象 2. AJax的特点 不适用于任何应用场景 导致逻辑处理混乱 Ajax是实现B\S模式下的异步交互 在实现同样的功能时,Ajax的性能更好 3. AJax的优点 1). 传统web交互模型,浏览器直接将请求发送给服务器

java多线程快速入门(四)

通过匿名内部类的方法创建多线程 package com.cppdy; //通过匿名内部类的方法创建多线程 public class ThreadDemo2 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); }

java多线程快速入门(三)

//通过实现Runnable接口实现多线程 package com.cppdy; //通过实现Runnable接口实现多线程 class MyThread1 implements Runnable{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); } } } public class ThreadDemo1 { public static voi

java多线程快速入门(二)

通过继承Thread类来实行多线程 package com.cppdy; //通过继承Thread类来实行多线程 class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); } } } public class ThreadDemo { public static void main(String

java多线程快速入门(二十一)

CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; import java.util.concurrent.CountDownLatch; class MyThread17 extends Thread{ private CountDownLatch countdownlatch; public MyThread17(CountDownLatch coun