线程

来源:互联网 发布:淘宝买家最多买多少 编辑:程序博客网 时间:2024/06/16 20:51

线程是一个程序里面不同的执行路径.

一个CPU在同一时间里只能执行一个线程。

创建线程有两个方法:

1

创建一个新的线程,通过创建Thead的实例来创建新的线程.

*可以定义一个Thread的子类并重写其run方法如:

    class MyThread extenfd Thead{

        public void run(){…}

        }

*然后生成该类的对象:

    MyThread myThread = new MyThead(…)

2

通过实现runnable接口来实现.

*定义线程类实现Runnable接口

*Thread myThread = new Thead(target) //target为Runnable接口类型.

*Runnable中只有一个方法:

    public void run(); 用以定义线程运行体.

*使用Runnable接口的类的run方法定义中可以使用Thread的静态方法;

    public static Thread currentThread() 获取当前线程的引用.

 

启动线程的两个方法:

1 通过调用Thead类的start()方法来启动一个新的线程.(线程启动)

2 直接调用run方法(方法调用)

线程状态转换:

Sleep join yield方法:

Thread.sleep()将当前线程睡眠制定毫秒数(是一个静态方法)

sleep会抛出InterruptedException异常

join()调用某线程的该方法,将当前线程与该线程"合并",即等待该线程结束,再恢复当前线程的运行.(相当于run的方法调用)

yield()让出CPU,当前线程进入就绪队列等待调度.

线程的优先级

getPriotity()获得线程的优先级数值

setPriority()设置线程的优先级数值

优先级越高得到CPU执行的时间片越多

currentThread()拿到当前线程

 

线程同步:

Synchronized(this)锁定当前对象:在执行语句过程之中,不会被另外一个线程打断。

 

死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

 

给当前对象加锁非加锁的方法还可以自由的访问,加锁的只是说另外一个线程不可能再访问加锁方法里面的东西。

 

互斥:某一个时间段,保证只有一个线程进入到方法体里面。不保证其他的线程是不是能够进到另外一个方法里面。

 

Stop:停止执行该线程,丢失锁,而且无法再次执行

Notify:叫醒一个stop、,使该线程可以继续执行。

 

Wait 和sleep的区别:

WaitObject的方法,sleepthread的方法

Wait停止执行该线程,丢失锁,而且无法再次执行

Sleep:停止执行该线程,不丢失锁,不用notify也可再次执行。