码迷,mamicode.com
首页 > 其他好文 > 详细

Thread basic

时间:2015-09-03 01:50:50      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

* 一个进程可以有多个线程,程序是静态的,进程是动态的

* 线程的主要方法

  》start():启动线程,并执行相应的run()方法

  》run():  子线程要执行的代码

  》currentThread():静态的,调取当前的线程

  》get(set)Name():获取(设置)线程的名字

  》yied():调用此方法的线程释放当前CPU的执行权

  》Join():在A线程调用B线程的Join方法,表示,当执行此方法是,A停止直至B线程执行完。

  》isAlive() : 判断线程是否还存活

  》sleep(long l):是当前的线程睡眠l毫秒

  》线程的通信:wait(),notify(),notifyAll()

* 设置线程的优先级

  》setPriority(int priority),getPriority(),-1 5 10-min normal max

技术分享
class Window extends Thread{
    //如果没有static则,三个各有100,加static三个对象公用100
    static int ticket = 100;
    public void run(){
        while(true){
            if(ticket>0){
                System.out.println(Thread.currentThread().getName()+"售票,票号:"
                        +ticket--);
            }else {
                break;
            }
        }
    }
}

@Test
    public void test002(){
        Window w1 = new Window();
        Window w2 = new Window();
        Window w3 = new Window();
        w1.setName("窗口1");
        w2.setName("窗口2");
        w3.setName("窗口3");
        w1.start();
        w2.start();
        w3.start();
    }
thread

* implements Runable

   》启动线程方法

  Thread t = new Thread(target);--->t.start();

* extends Thread vs implements Runable

  》Thread 本身就实现了Runable接口

  》实现的方法由于继承,避免单继承的局限性

  》如果多个线程要操作同一份资源或数据,更适合implements

技术分享
//多个线程共享一个对象
        WindowBean w = new WindowBean();
        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);
//使用extends的情况
                Window w1 = new Window();
        Window w2 = new Window();
        Window w3 = new Window();
        w1.start();
        w2.start();
        w3.start();        
example

技术分享

* 线程的同步机制(for safe)

  》线程安全(for example:由于一个线程在操作共享数据过程中,在未执行完毕,另外的线程参与进来,导致共享数据存在安全问题)

  》如何解决

    必须一个县城操作完之后,其他线程才有机会参与共享数据

  1.同步代码块

  synchronized(同步监视器){

    //需要同步的代码块

  }

    >共享数据,多个线程操作同一个数据

    >同步监视器,有一个类的对象充当(任何类,即锁)

    >要求,所有的线程必须公用同一个锁

  2.同步方法

  public synchronized void method(){

    //将操作共享数据的方法声明为synchronized,其锁是this。

  }

   >两个同步方法使用时,extends需要注意this是否为同一锁。

*  死锁的问题

  》不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的资源。

* 线程的通信

  》wait(),notify(),notifyAll(),必须放在synchronized里。

技术分享
synchronized (this) {
                if (num <= 100) {
                    notify();
                    try {
                        Thread.currentThread().sleep(10);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + ":"
                            + num);
                    num++;
                } else {
                    break;
                }
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
notify-wait

 

Thread basic

标签:

原文地址:http://www.cnblogs.com/Nyan-Workflow-FC/p/4779539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!