6月17日线程

来源:互联网 发布:网站seo 编辑:程序博客网 时间:2024/05/14 05:59

线程

1,         进程:一个运行中的程序就是进程,是操作系统分配CPU资源与内存资源的最小单位;其内存独立。

2,         线程:通过代码可以创建.销毁。进程内部可以拥有1个或多个线程,操作系统将资源分配给进程后,进程再将资源分配线程。是进程之上的多任务处理,可以认为进程是线程的容器。

Java SE程序一旦执行,至少会有一个主线程(执行main函数的线程)。除主线程外,Java虚拟机还会启动垃圾回收线程等其他线程。

3,         线程的创建

两种定义线程的方法:继承自Thread类或实现Runnable接口,然后覆盖run方法。

线程创建并运行后至少会经历就绪(Born,指为线程对象分配内存空间).执行(running,指线程正在执行run方法中的指令).销毁(terminated,run方法执行结束后线程即销毁)三个状态。

有的线程还会进入休眠.阻塞等状态。

public class Test extends Thread {

       publicvoid run() {

              System.out.println("a");

       }

              staticclass Test1  implementsRunnable{

              @Override

              publicvoid run() {

                     System.out.println("b");

              }

       }

       publicstatic void main(String[] args) {

              Testt = new Test();

              t.start();

              newThread(new Test1()).start();

       }

}

4,         线程的休眠

Thread.sleep()方法可以将当前线程进入到休眠状态,线程休眠时会释放CPU资源,非常适合用来进行定时操作。

使用线程休眠的特点非常适合在Swing界面中进行动画处理。

5,         线程安全(synchronized):

一般线程安全都是由于访问共享资源所引起的。

共享资源可能是一个静态变量.随想的属性.或数据库连接。

同步锁:synchronized。在方法定义时加入synchronized修饰符即添加了同步锁,当多个线程准备同时调用该方法时,只有一个线程可以获取到同步锁,进行调用,其他线程会变为阻塞状态停止运行,直到该线程执行方法完毕退出后释放锁,其他线程会按刚才的规则再次竞争获取同步锁并执行。一般枷锁的方法称为同步方法。

6, 等待唤醒机制:涉及的方法:

 wait:将同步中的线程处于冻结状态。释放了执行权,释放了资格。同时将线程对象存储到线程池中。

 notify:唤醒线程池中某一个等待线程。

 notifyAll:唤醒的是线程池中的所有线程。

7, wait和sleep区别: 分析这两个方法:从执行权和锁上来分析: wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。 sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。 wait:线程会释放执行权,而且线程会释放锁。 Sleep:线程会释放执行权,但不是不释放锁。

8, 线程的停止:通过stop方法就可以停止线程。但是这个方式过时了。

9, ---------<java.lang.Thread >----------

 interrupt():中断线程。

 setPriority(int newPriority):更改线程的优先级。

 getPriority():返回线程的优先级。

toString():返回该线程的字符串表示形式,包括线程名称、优先级和线程组。

Thread.yield():

暂停当前正在执行的线程对象,并执行其他线程。 setDaemon(true):将该线程标记为守护线程或用户线程。将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。该方法必须在启动线程前调用。

 join:临时加入一个线程的时候可以使用join方法。 当A线程执行到了B线程的join方式。A线程处于冻结状态,释放了执行权,B开始执行。A什么时候执行呢?只有当B线程运行结束后,A才从冻结状态恢复运行状态执行。