线程

来源:互联网 发布:淘宝联盟在哪里提现 编辑:程序博客网 时间:2024/06/05 20:43

【线程的基本概念】

1、线程是一个程序内部的顺序控制流。

通俗一点理解,线程是一个程序里不同的执行路径。

2、线程的启动必须调用Thread类中的start函数。

3、线程与进程的区别

1)、每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。

2)、线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。

3)、多进程:在操作系统中能同时运行多个任务(程序)。

4)、多线程:在同一应用程序中有多个顺序流同时执行。

4、Java的线程是通过java.lang.Thread类来实现的。

5、VM启动时会有一个由主方法(public static void main(){})所定义的线程。

6、可以通过Thread的实例来创建新线程。

7、每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。

8、通过调用Thread类中的start()方法来启动一个线程。


【线程的创建与启动】

新线程的创建与启动有两种方式。

1、第一种

1)、定义线程类实现Runnable接口

2)、Thread myThread = new Thread( Runnable target )

3)、Runnable中只有一个方法;

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

4)、使用Runnable接口可以为多个线程提供共享的数据

5)、在实现Runnable接口的类的run方法定义中可以用Thread的静态方法:

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

2、第二种

1)、可以定义一个Thread的子类并重写其run方法,如:

class MyThread extends Thread{

public void run(){......}

}

2)、然后生成该类的对象

MyThread myThread = new MyThread(...)

推荐:只要能用接口,就不要从Thread继承!!!!!


【线程控制的基本方法】

isAlive() //判断线程是否还“活着”,即线程是否还未终止。

getPriority() //获取线程的优先级数值。

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

Thread.sleep() //将当前线程睡眠指定毫秒数。

join() //调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。

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


【线程同步】

1、互斥锁:synchronized.

在执行某一方法过程中,当前对象被锁定。其他使用互斥锁的方法必须等待该方法完成后,才能使用互斥锁。

2、wait与notify

调用时使用 this.wait() 和 this.notify()

3、sleep与wait的区别

wait时别的线程可访问锁定的其他对象,调用wait方法时必须锁定该对象,sleep时别的线程也不可访问锁定的其他对象。




















0 0