今天系统学习下JAVA的多线程,之前看过一些,看过也就过去了,还是尽量多记录下,好好总结下。

多线程在较低的层次傻瓜你扩展了多任务的概念:一个程序同时执行多个任务.

进程和线程的区别:本质上每个进程拥有自己的一整套变量,而线程则共享数据。共享变量使线程之间的通信比进程之间更有效、容易。

在一个单独的线程中执行一个任务的简单过程:

1),将任务代码移到实现了Runnable接口的类的run方法中,

public interface Runnable
{
    void run();
}

实现一个类:

Class MyRunnable immplements Runnable
{
    public void run()
    {
        //task code
    }
}

2),创建一个类对象

  Runnable r = new MyRunnable();

3),由Runnable创建一个Thread对象:

   Thread t =  new Thread(r);

4).启动线程:

  t.start();

public class ThreadTest implements Runnable {

    public static void main(String[] args){
        ThreadTest t1 = new ThreadTest("thread1");
        ThreadTest t2 = new ThreadTest("thread2");
        Thread demo1 = new Thread(t1);
        Thread demo2 = new Thread(t2);
        demo1.start();
        demo2.start();
        
    }
    public ThreadTest(){}
    public ThreadTest(String name){
        this.name = name;
    }
    
    public void run()
    {
        for (int i = 0; i < 5; i++) {
            System.out.println(name + "running  " + i);
        }
    }
    
    private String name; //field
}

另外一种方法是继承Thread类,

example2:

public class ThreadTest extends Thread {

    public static void main(String[] args){
        ThreadTest t = new ThreadTest();
        ThreadTest t1 = new ThreadTest();
        
         t.start();
         t1.start();
    }
    public void run(){
        System.out.println(this.getName()+" Running");
    }
}

  void interrupt() 向线程发送中断请求/

  static boolean interrupted()测试当前线程是否被中断/

  static Thread currentThread() 返回代表当前执行线程的Thread对象/

要确定一个线程当前状态,可调用getState()方法。

  线程的状态:New、 Runnable、Blocked、Waiting、Time waiting、Terminated。

守护线程

  t.SetDaemon(true);

守护线程的唯一用途是为其他线程提供服务,例如计时线程。

同步

在大多数实际的多线程应用中,两个或两个以上的线程需要共享对同一数据的存取,同步存取。

有两种机制防止代码块受并发访问的干扰,synchronized关键字自动提供一个锁以及相应的“条件”,对于大多数需要显式锁的情况是很便利的。

引入ReentrantLock类。

用ReentrantLock保护代码块的基本结构:

myLock.lock();
try
{
    critical section
}finally
{
    myLock.unlock();
}//这一结构确保任何时刻只有一个线程进入临界区,一旦一个线程封锁了锁对象,其他任何线程都无法通过lock语句,当其他线程调用lock时,它们blocked。

条件对象conditional variable

通常,线程进入临界区,发现在某一条件满足之后它才能执行。要使用一个条件对象来管理那些已经获得了一个锁,但还不能做有用工作的线程。

newCondition();

 

 

posted on 2013-11-21 16:43  happinessqi  阅读(148)  评论(0编辑  收藏  举报