Java那些事之多线程

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();
        }
}
 
复制代码

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

 

posted @   ~大器晚成~  阅读(415)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示