Java中的多线程经常被使用,而且功能还是比较强大的。下面来简单介绍一下。

本人经常使用的多线程方式是去实现Runnable的run方法,然后在外面用start方法进行调用。这样感觉思路更清晰一些。

好了,上代码,一看就明白了。

比如我要设计一个线程A.

代码如下:

public class ThreadA implements Runnable
{
        /*
     * (non-Javadoc)
     * @see java.lang.Runnable#run()
     * 启动线程
     */
    public void run() {
            System.out.println("A started");
        }
}

OK,很简单吧。A线程定义完毕。

下面进行A线程启动的调用

ThreadA a = new ThreadA();
Thread thread_a = new Thread(a);
thread_a.start();

既然是多线程,我们看看下个线程B。为了实现线程的切换,我们假设B要等到A完成之后再开始。看看怎么写吧

首先还是定义

public class ThreadB implements Runnable
{
     private ThreadA threada;

public ThreadB(ThreadA a)
     {
         this.threada = a ;
     }
    /*
     * (non-Javadoc)
     * @see java.lang.Runnable#run()
     * 启动线程
     */
    public void run() {
            synchronized(threada ) {
                try {
                a.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
               }
        }
            System.out.println("B started");
        }
}

外层的调用也是一样
ThreadB b = new ThreadB();
//这是唯一的区别
Thread thread_b = new Thread(a);
thread_b.start();

这样一来,线程B也大功告成了。

下面是关键的地方,注意到B线程开始在wait(),什么时候执行呢?

因此我们需要在一个地方去唤醒B线程,考虑到我们假设的场景是A执行之后去执行B线程,那么A线程后面需要加一下唤醒。

public class ThreadA implements Runnable
{
        /*
     * (non-Javadoc)
     * @see java.lang.Runnable#run()
     * 启动线程
     */
    public void run() {
            System.out.println("A started");
            synchronized(this) {
        notifyAll();
        }

这样一来,就可以实现我们的效果了。

转载于:https://www.cnblogs.com/luchen927/archive/2011/07/08/2094108.html

Java那些事之多线程相关推荐

  1. Java基础篇:多线程

    文章目录 1.概念:程序.进程.线程 2.线程的创建和使用 3.线程的生命周期 4.线程的同步 5.线程的通信 6.JDK5.0新增线程创建方法 1.概念:程序.进程.线程 程序(program)是为 ...

  2. java线程future_Java中多线程对运行结果怎么利用future获取

    Java中多线程对运行结果怎么利用future获取 发布时间:2020-12-07 17:11:08 来源:亿速云 阅读:124 作者:Leah Java中多线程对运行结果怎么利用future获取?针 ...

  3. Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?

    苍穹之边,浩瀚之挚,眰恦之美: 悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 我国宋代禅宗大师青原行思在<三重境界>中有这样一句话:" 参禅之初 ...

  4. Java第十一课——多线程实现飞机大战

    Java第十一课--多线程实现飞机大战 一.补充讲解一下线程 在第九课的基础上补充两点: 1.启动线程使用start()方法而不直接使用rin()方法,因为线程是一直重复执行的,调用run方法只会执行 ...

  5. 【躲不过的Java “锁事”】一文扫除对Java各种锁的困扰!

    简介 锁是Java中快捷理解多线程的一条捷径,为我们开发多线程提供理论支持,想成为一个合格的工程师,Java中的锁是必定躲不过的一个知识点,并且内容繁多,本文点到为止,浅谈Java中的各种锁,带您理解 ...

  6. JUC-不得不说的Java“锁”事

    不得不说的Java"锁"事 前言 一synchronized 1. 变量安全性 2.多个对象多个锁 3.synchronized方法与锁对象 4.脏读 5.synchronized ...

  7. java callable 详解_详解Java Callable接口实现多线程的方式

    在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...

  8. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  9. Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...

最新文章

  1. Hungarian method 匈牙利算法 解决指派问题
  2. 关于DMA,TCM(ITCM和DTCM)和Cache的理解
  3. 基于数据挖掘的旅游推荐APP(四):“我的”模块
  4. 自定义线程池-参数设计分析
  5. sql range 范围内查询
  6. Spring Security配置错误
  7. Java8中的外观(JavaFX8)
  8. lstm需要优化的参数_LSTM的物理结构和一些细节
  9. png-CRC32校验
  10. 追踪多省网络故障:域名解析瘫痪后的连锁反应
  11. 计算机中信息表示方法,计算机中的信息表示方法二进制
  12. docker 安装MySQL远程连接
  13. 把博客园自己博客皮肤改了下
  14. Axure RP 9 Beta 开放下载(更新激活密钥和汉化包)
  15. 离散数学期末复习笔记【精华版】
  16. 网站架构资料收集整理
  17. python url加密解密_python解密百度加密链接的脚本
  18. 显卡内存管理机制及驱动实现(Intel gma500为例)
  19. ios射击类游戏简单代码射击
  20. 复旦大学附属肿瘤医院请“牛顿”打造智慧医疗

热门文章

  1. 【深度学习】梯度和方向导数概念解析(代码基于Pytorch实现)
  2. python【力扣LeetCode算法题库】69-x 的平方根
  3. php手机电脑,php用手机关计算机(电脑)
  4. 如何判断链表是否有环_如何快速判断气门油封是否漏油?
  5. 浏览器时间久了重新登录_以登录为例讲解什么是全面的测试设计
  6. php修改http header,php header函数的常用http头设置
  7. 怎么把mysql转换mssql_MySQL如何转SQL server
  8. css中vertical-align生效
  9. linux内核编译 menuconfig详解,Linux内核编译menuconfig介绍
  10. 网络广告推广浅析网站的外链究竟要如何优化效果才会更好呢?