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()方法唤醒
- 【Java多线程】多线程死锁
- Java 多线程
- java 多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA 多线程
- Java多线程
- java多线程
- JAVA 多线程
- Java 多线程
- Java 多线程
- java多线程
- Java 多线程
- Java多线程
- java 多线程
- iOS runtime各种关键字
- Redis 安装
- HashMap和ConcurrentHashMap研究
- 使用C++实现工厂模式
- 结巴包的使用自己探究【总共5点】
- java多线程
- Android Studio如何查看资源或者函数在哪些类中被引用
- 约瑟夫环
- 百度空间的变迁
- Android 与 js 的交互
- Python 断言assert的使用
- Block的引用循环问题 (ARC & non-ARC)
- Android Context 是什么?
- uva 11151Longest Palindrome