java多线程总结笔记1——Runnable和Thread

12 篇文章 0 订阅

Runnable接口

Runnable是任务类,它的void run()函数应该在子类中被重写为任务流程。


Thread类(线程类)。

Thread currentThread():静态方法,返回正在运行的线程,当然也就是本线程。

Thread(ThreadGroup group, Runnable target, String name):构造一个执行target任务(本体)的线程,线程属于线程池group,名叫name.

新建线程的初始优先级被设定为与父线程一样;当且仅当父线程是守护线程时,新建线程才是守护线程。当所有的用户线程都已经结束的时候,jvm就会退出。

group为null时,线程所属的线程池由系统分配;name为null时,线程的名称由系统分配;target为null时,线程会把自己的run函数当作任务流程。

Thread(),Thread(Runnable target),Thread(String name),Thread(ThreadGroup group, Runnable target),Thread(ThreadGroup group, String name),Thread(Runnable target, String name):缺席的参数相当于被设为null.

void start():开始执行任务流程。如果构造函数中指定了任务,那么任务流程就是任务的void run()函数,否则,任务流程就是线程自己的void run()函数。

void run():参见上面。

线程对象只能被启动一次,不可以多次start,也不可以在线程结束之后又一次start.

void yield():放弃执行权转为就绪状态,让调度器重新调度一次。调度的结果可能还是让本线程执行,导致本线程再次转入运行状态。

void sleep(long millis):睡眠millis毫秒。

void sleep(long millis, int nanos):睡眠millis毫秒+nanos纳秒。

void interrupt():中断线程,不一定会成功。

boolean interrupted():返回线程是否处于中断状态,并让线程继续。

boolean isInterrupted():返回线程是否处于中断状态,没有额外动作。

boolean isAlive():如果线程已经启动而尚未结束,则返回true.

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

void setPriority(int newPriority):设置线程优先级。如果newPriority大于所在线程组所允许的最高优先级,则设置为线程组允许的最高优先级。

String getName(),void setName(String name):返回/设置线程名称。

ThreadGroup getThreadGroup():返回所属的线程池。如果线程已经结束,则返回null.

boolean isDaemon():如果线程是守护线程,则返回true,否则返回false.

void setDaemon(boolean on):如果on为true,则将线程设置为守护线程,否则设置为用户线程。注意这个设置必须在线程start前进行。

long getID():返回线程ID。线程名称可以重复,但是线程ID是唯一的。线程ID在线程创建时由系统分配,在线程结束后可以被重新使用。

String toString():返回线程的信息,包括名称、优先级、所属线程池等。

void join():如果线程a想要等到线程b结束之后再往下走,那么就可以用b.join()等待b结束。

void join(long millis),void join(long millis, int nanos):也是等待线程结束,但是有超时。


创建线程示例

方法一:创建无任务Thread

class MyThread extends Thread
{
    public void run()
    {流程}
}

MyThread myThread = new MyThread();
myThread.start();
方法二:创建带任务Thread

class MyTarget implements Runnable
{
    public void run()
    {流程}
}

MyTarget myTarget = new MyTarget();
Thread myThread = new Thread(myTarget);
myThread.start();

方法二中,如果用一个任务创建了多个线程,由于所有线程执行的都是任务本体,所以任务的成员变量会被所有线程所共享。例如,

class MyTarget implements Runnable
{
    private int ticket = 5;  //5张票
    public void run() 
    {
        while(true)
        {
            if(this.ticket > 0)
                System.out.println(Thread.currentThread().getName()+"正在卖票"+this.ticket--);
        }
    }
}

public class test
{
    public static void main(String[] args) 
    {
        MyTarget myTarget = new MyTarget();
        new Thread(myTarget, "1号窗口").start();
        new Thread(myTarget, "2号窗口").start();
        new Thread(myTarget, "3号窗口").start();
    }
}

运行结果可能为





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值