java多线程

来源:互联网 发布:淘宝假冒申诉 编辑:程序博客网 时间:2024/06/05 09:43

java多线程

一、实现线程的两种方式

1.继承Thread类

Thread中常用的两个构造方法
public Thread(String threadName)//创建一个名为threadName的线程对象
public Thread()

继承Thread类创建一个新的线程
public class ThreadDemo extends Thread
{
public void run()//覆盖Thread类中的run()方法,指定实现线程功能的代码
{}
}

public static void main(String[] args)
{
new ThreadDemo().start();//启动线程
}

2.实现Runnable接口

当创建的类需要继承其他类时,可以通过实现Runnable接口来使用多线程

实现Runnable接口
public class ThreadDemo extends Object implements Runnable
实现Runnable接口的程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。Thread类中有两个构造方法:
public Thread(Runnable r)
public Thread(Runnable r,String name)

public class ThreadDemo extends Object implements Runnbale
{
public void run()
{}
}

public static void main(String[] args)
{
new ThreadDemo().start();//启动线程
}

二、线程的生命周期

出生状态、就绪状态、运行状态、等待状态、休眠状态、阻塞状态、死亡状态7种状态

进入就绪状态:
1.调用sleep()方法
2.调用wait()方法
3.等待输入/输出完成

进入运行状态
1.线程调用notify()方法
2.线程调用notifyAll()方法
3.线程调用interrypt()方法
4.线程的休眠时间结束
5.输入/输出结束

三、线程的操作

1.线程的休眠

Thread.sleep(1000);//Thread线程休眠1000ms

2.线程的加入

Thread().join();//假设正在运行的是线程A,线程B使用join()方法后,线程A暂停运行,直到线程B运行结束,线程A继续运行

3.线程的中断

在run()方法中使用无限循环的形式,然后使用一个布尔型标记控制循环的停止。

public ThreadDemo extends Thread{    private boolean isContinue = false;    public void run()    {        while(true)        {            if(isContinue)                break;        }    }    public void setContinue()    {        this.isContinue = true;    }}

如果线程使用了sleep()方法或wait()方法进入了就绪状态,可以使用Thread类中的interrupt()方法使线程离开run()方法,同时结束线程,但程序会抛出InterruptedException异常

4.线程的礼让

Thread类中的yield()方法,它会给当前正处于运行状态下的线程一个提醒,告知它可以将资源礼让给其他线程,这仅仅是一种提醒。

四、线程的同步

1.同步块

public void run()
{
synchronized(Object)//将共享资源的操作放在同步块内
{}
}

2.同步方法

public synchronized void fun()
{
//code,共享资源操作
}

public void run()
{
fun();
}

五、线程间的通信

线程间的通信使用wait()、notify()、notifyAll()方法实现,wait()、notify()、notifyAll()方法只能在同步块或同步方法中使用
wait()使线程从运行状态进入到就绪状态,与sleep的区别从同步的角度来说,调用sleep()的线程不释放锁,调用wait()的线程释放锁,有两种形式:
wait(time)
wait()//需要使用notify()或notifyAll()方法唤醒

0 0
原创粉丝点击