Java的多线程
来源:互联网 发布:百战天下数据 编辑:程序博客网 时间:2024/05/29 14:32
一、创建
1、新建一个类,实现Runnable接口,重写run方法,在run方法内写要完成的任务,在main函数中,使用该类的对象 .run(),此时是使用main方法的线程,并非新建一个线程。
class Task implements Runnable{ @override public void run(){ //..................... }}public class TestThread{ public static void main(String[] args) { Task task = new Task(); task.run(); //此处使用的是main方法的线程 }}
2.新建一个类,实现Runnable接口,重写run方法,在run方法内写要完成的任务,在main函数中,将该类实例作为新建Thread的参数,该新建线程调用 .start() ,开启一个新的线程。
class Task implements Runnable{ @override public void run(){ //..................... }}public class TestThread{ public static void main(String[] args) { Thread thread = new Thread(new Task()); thread.start(); //新启一个线程 }}
3、新建一个类,实现Runnable接口,使用线程池
class Task implements Runnable{ @override public void run(){ //..................... }}public class TestThread { public static void main(String[] args){ ExecutorService exec = Executors.newCachedThreadPool(); //此处使用线程池 for(int i=0;i<1;i++){ exec.execute(new Task()); } }}
4.直接继承Thread类
class Task extend Thread{ public void run(){ //..................... }}public case class TestThread{ public static void main(String[] args) { Task task = new task() task.start(); //新启一个线程 }}
二、
Runnable接口的理解:具有一个run()方法,其在线程开启时 .start() 会运行。
实现Runnable接口的类不具有创建线程的能力,其被作为构造函数的变量
Thread(Runnable target)
Thread(Runnable target, String name)
起到的作用是将一个活动的任务交给该线程。
Thread具有创建线程的能力,其常用的方法:
start
启动线程并自动执行run方法
run
包含需要执行的代码
sleep
将线程进入休眠状态,但不释放对象锁
yield
便是可以让出cpu,具体让不让由cpu决定
join
使用t.join()加入一个线程t,使用了该语句的线程将被挂起直到线程t生命结束才恢复,不过可以为join方法设置一个超时参数,若超时则join方法总能返回
interrupt
使线程中断
wait方法和notify方法
wait方法:在其他线程调用对象的notify方法或者notifyAll方法前,或者超过指定的时间量前,导致当前线程等待。线程调用wait方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify或者notifyAll方法),这样它才能重新获得锁的拥有权和恢复执行。
notify方法:唤醒一个等待当前对象的锁的线程。notify方法应该是被拥有对象的锁的线程所调用。被唤醒的线程是不能被执行的,需要等到当前线程放弃这个对象的锁。
notifyAll方法:唤醒所有等待锁的线程。
上面的三个方法要求在调用时线程已经获得了对象的锁,因此对这两个方法的调用需要放在synchronized方法或synchronized块中。
setDaemon
将线程设置为后台线程,需要在线程启动之前设置,isDaemon检查是否为后台线程,当所有非后台线程结束时,后天线程自动死亡
setPriority(int priorityLevel)
设置优先级(0-10),使用 getPriority()可以获取线程的优先级
- Java 多线程(多线程的实现)
- Java多线程-多线程的引入
- Java多线程-多线程的引入
- 【Java】java的多线程
- JAVA多线程的控制
- Java的多线程机制
- JAVA 的多线程浅析
- 关于JAVA的多线程
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- java多线程的理解
- JAVA 的多线程浅析
- JAVA的多线程
- JAVA的多线程
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- Java的多线程机制
- java的多线程同步
- 【Get深一度】Hilbert变换(平时写的文档,没法直接复制粘贴到CSDN里,只好截图了)
- 调取微信相册相机
- 3872---->幸运名单
- Android 弹出对话框 且焦点在确认或者取消
- oracle imp和exp
- Java的多线程
- bzoj4602: [Sdoi2016]齿轮
- 前端开发工具—WebStorm
- unity中控制物体的移动,和旋转
- bzoj4300: 绝世好题
- selectKey的使用
- 20190506@集合继承关系的实现
- css 字体
- 浅谈HTTP中Get与Post的区别