Java的多线程

xiaoxiao2021-02-28  103

一、创建 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()可以获取线程的优先级

转载请注明原文地址: https://www.6miu.com/read-55137.html

最新回复(0)