Java学习笔记【多线程基本知识】

1、什么是线程

每个程序同时执行多个任务,通常每一个任务成为一个线程。可以同时运行一个线程以上的程序称为多线程程序。

多线程与多进程区别:本质上在于每个进程拥有自己的一整套变量,而线程则共享数据。

Thread类的静态sleep方法将暂停给定的毫秒数。
线程执行任务的一个基本过程:
    1)Runable接口
    class MyRunable implements Runable {
        ...
        public void run()
        {
            task code...
        }
    }

    2)创建一个类对象
    Runable r = new MyRunable();

    3)由Runable创建一个Thread对象:
    Thread t = new Thread(r);

    4)启动线程
    t.start();
注意:不要直接调用run()方法,这样只会执行同一个线程中的任务,而不会启动新的线程。

2、中断线程

void interrupt():
向线程发送中断请求。线程中断状态将被值为true。如果目前该线程被一个sleep调用阻塞,那么,InterruptedException异常被抛出。

static boolean interrupted():
测试当前线程是否被中断。 调用后将线程状态重置为false。

boolean isInterrupted():
测试线程是否被终止。调用不改变线程状态。

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

3、线程状态

1)New
new操作符创建一个线程时,如new Thread(r),这意味着它的状态是new。

2)Runable
一旦调用start方法,线程处于runable状态。

3)Blocked被阻塞线程
一个线程试图获取一个被占用的内部的对象琐时,进入阻塞状态。

4)Waiting 等待线程
线程等待另一个线程通知调度器一个条件时,这个线程进入等待状态。

5)Timed waiting(计时等待)
有几个方法有一个超时参数,调用他们导致进入计时等待状态,

6)Terminated (被终止)
run方法正常退出而自然死亡。
因为一个没有捕获的异常终止了run方法而意外死亡。


void join(): 等待终止指定的线程。

4、线程属性

线程优先级:
setPriority方法提高或降低线程的优先级。
Sun为Linux提供的Java虚拟机,线程优先级被忽略,所有线程具有相同优先级。

守护线程:
通过调用t.setDaemon(true);将线程转为守护线程。
唯一用途就是为其他线程提供服务。

未捕获异常处理器

5、同步

ReentrantLock类,synchronized关键字自动提供一个锁及相关的条件。
用ReentrantLock保护代码块的基本结构:
    myLock.lock();
    try
    {
        判断区
    }
    finally
    {
        myLock.unlock();
    }
synchronized关键字声明:
    public synchronized void method()
    {
        method body
    }

    等价于

    public void method()
    {
        this.intrinsiclock.lock();
        try
        {
            method body
        }
        finally
        {
            this.intrinsiclock.unlock();
        }
    }

你可能感兴趣的:(java,多线程)