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 @ 2011-07-08 22:00  ~大器晚成~  阅读(413)  评论(0编辑  收藏  举报