一、以下只是简单的实现多线程

1:继承Thread

2:实现 Runnable

3:实现callable

如果需要返回值使用callable,如果不需要返回最好使用runnable,因为继承只能单继承,所以不推荐使用Thread。

具体代码

@RunWith(SpringRunner.class)
@SpringBootTest
public class Thread_Test {
    private class Thread1 extends Thread{
@Override
public void run() {
super.run();
System.out.println("执行了Thread的Run方法");
}
} private class Thread2 implements Runnable{
@Override
public void run() {
System.out.println("执行了Runnable的Run方法");
}
} private class Thread3 implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("执行了Runnable的Run方法");
Thread.sleep(5000);    //让线程休眠5s,测试返回值
return "I am callable";
}
} @Test
public void testThread() throws Exception{
Thread1 t1 = new Thread1();
new Thread(t1).start(); Thread2 t2 = new Thread2();
new Thread(t2).start(); Thread3 t3 = new Thread3();
FutureTask<String> task = new FutureTask<String>(t3);
new Thread(task).start();
System.out.println(task.get());          //是异步获取的值,等待程序执行完
}
} 执行结果

二、停止线程的方法

suspend()、resume()、stop() ,不建议使用,这种是强制关闭线程,如果有锁可能不会释放。

建议使用interrupt()方法停止线程。

interrupt:中断一个线程。不是强行的中断,只是添加了一个中断标志位true。

interrupted:判定当前线程是否处于中断状态。

static的 isInterrupted:判定当前线程是否处于中断状态。他会把中断的标志位给位false。

代码:public class EndThread {

    private static class UseThread extends Thread{
@Override
public void run() {
String name = Thread.currentThread().getName();
while(!isInterrupted()){  //当中断标识位位true,就跳出循环。
System.out.println(name+"is run");
}
       System.out.println(name + "is flag "+isInterrupted()); //当前的标识位为true
       interrupted(); //interrupted把中断标识位设置为false。
       System.out.println(name + "is flag "+isInterrupted()); //当前的标识位为false
      }
  }
    public static void main(String[] args) throws Exception {
Thread u = new UseThread();
u.start();
Thread.sleep(1000);
u.interrupt(); //告诉程序要中断了,设置中断标志位。
}
} 运行结果

  Thread-0is run
  Thread-0is run
  Thread-0is flag true
  Thread-0is flag false



												

java中实现多线程的几种方式(简单实现)的更多相关文章

  1. Java中实现多线程的四种方式

    Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...

  2. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  3. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  4. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...

  5. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  6. Java中创建线程的三种方式以及区别

    在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...

  7. java中使用mongodb的几种方式

    最近有时间看了一下mongodb,因为mongodb更容易扩展所以考虑使用mongodb来保存数据. 首先下载安装mongodb,这是很简单的,装好后使用mongod命令就可以启动数据库.正式部署的话 ...

  8. java中设置代理的两种方式

    1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...

  9. java中实现同步的两种方式:syschronized和lock的区别和联系

    Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...

随机推荐

  1. ArcEngine交互画线

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...

  2. Qt 之模型/视图(自定义按钮)

    https://blog.csdn.net/liang19890820/article/details/50974059 简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显 ...

  3. 动态注册broadcast的安全考虑

    一.android service通知activity更新方式有1. service 通过广播的形式发送broadcast,向这个activity的内部类发广播的消息来更新界面2. service直接 ...

  4. 深入理解http协议的特点

    HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1.支持客户/服务器模式:2.简单快速:3.灵活:4.无连接:5.无状态. 无连接 无连接的含义是限制每次连接只处理一个请求. ...

  5. Ssh 证书验证登录

    一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 ...

  6. ns2.35-classifier.cc

    line143:recv() /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ /* * Copyri ...

  7. February 12 2017 Week 7 Sunday

    There is no place like home. 任何地方都不能与家相提并论. After tens of years roving outside the hometown, I sudde ...

  8. IIS 7.5+FCK编辑器+burp suite神器拿webshell

    本人小菜一枚,大牛勿喷 看图: 一个越南狗的网站,看了看好多人来过哦,估计都是在这跪下了,试了好多别人上传滴都不行,看了看是IIS7.5,难怪都卡在这里了,于是小编直接上神器Burp Suite- 截 ...

  9. 08提权 系统文件权限和远程连接IP绕过 安装后门

    大家都知道08权限的系统权限设置很严格  面对限制IP连接的情况 我们及时拿到system权限 有账号也上不去这种情况下只能弄shift后门 或者放大镜了  但08权限 在system权限也操作不了系 ...

  10. TypeScript----类

    一.类的属性 public: 公有, private: 私有,不能在声明它的类的外部访问,只能在类内部访问 protect: 保护,不能在声明它的类的外部访问,但继承者除外 readonly 只读属性 ...