ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Java JUC&多线程 底子完整版
[打印本页]
作者:
熊熊出没
时间:
2024-5-24 14:10
标题:
Java JUC&多线程 底子完整版
Java JUC&多线程 底子完整版
目录
Java JUC&多线程 底子完整版
1、 多线程的第一种启动方式之继承Thread类
2、多线程的第二种启动方式之实现Runnable接口
3、多线程的第三种实现方式之实现Callable接口
4、多线的常用成员方法
5、线程的优先级
6、守护线程
7、线程的让出
8、线程插队
9、同步代码块
10、同步方法
11、线程锁
12、死锁问题
13、等候唤醒机制(消耗者模式)
14、阻塞队列下的等候唤醒机制
线程池
1、线程池的创建
2、自定义线程池
1、 多线程的第一种启动方式之继承Thread类
优点: 比较简朴,可以直接使用Thread类中的方法,缺点: 可以拓展性比较差,不能再继承其他的类
线程类MyThread
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() + "Hello World");
}
}
}
复制代码
执行类ThreadDemo
public class ThreadDemo {
public static void main(String[] args) {
/*
* 多线程第一种启动方式
* 1. 自己定义一个类继承Thread
* 2. 重写run方法
* 3. 创建启动对象,并启动线程
*/
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();
}
}
复制代码
2、多线程的第二种启动方式之实现Runnable接口
优点: 拓展性强,实现该接口的同时可以继承其他的类,缺点: 相对复杂,不能直接使用Thread类中的方法
线程类MyRunnable
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程要执行的代码
for (int i = 0; i < 100; i++) {
// 先获取当前线程的对象
Thread thread = Thread.currentThread();
System.out.println(thread.getName() + "Hello World");
}
}
}
复制代码
执行类ThreadDemo
public class ThreadDemo {
public static void main(String[] args) {
/*
* 多线程的第二种启动方式
* 1. 自定义一个类实现Runnable接口
* 2. 重写里面的run方法
* 3. 创建自己的类对象
* 4.创建一个Thread类的对象,并开启线程
*
*/
// 任务对象
MyRunnable myRun = new MyRunnable();
// 线程对象
Thread t1 = new Thread(myRun);
Thread t2 = new Thread(myRun);
// 给线程设置名字
t1.setName("线程1");
t2.setName("线程2");
// 开启线程
t1.start();
t2.start();
}
}
复制代码
3、多线程的第三种实现方式之实现Callable接口
优点: 拓展性强,实现该接口的同时可以继承其他的类,相对复杂,不能直接使用Thread类中的方法
线程类MyCallable
public class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
// 求1~100之间的和
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum = sum + i;
}
return sum;
}
}
复制代码
例子,MyThreadPoolDemo1
public class ThreadDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
/*
* 多线程的第三种实现方式
* 特点: 可以获取到多线程的运行结果
* 1. 创建一个MyCallable类实现Callable接口
* 2. 重写call (是有返回值的,表示多线程运行的结果)
* 3. 创建MyCallable的对象 (表示多线程要执行的任务)
* 4. 创建FutureTask的对象 (管理多线程运行的结果)
* 5. 创建Thread类的对象 并启动(表示线程)
*/
// 创建MyCallable对象 (表示要执行的多线程的任务)
MyCallable mc = new MyCallable();
// 创建FutureTask的对象 (作用管理多线程运行的结果)
FutureTask<Integer> ft = new FutureTask<>(mc);
// 创建线程对象
Thread t1 = new Thread(ft);
// 启动线程
t1.start();
// 获取多线程运行的结果
Integer result = ft.get();
System.out.println(result);
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4