CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章彻底搞懂Java多线程(一)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Java多线程
。
线程的创建
1.继承Thread 。
2.实现Runnable 。
3.实现Callable 。
使用继承Thread类来开发多线程的应用程序在设计上是有局限性的,因为Java是单继承.
继承Thread类 。
- public class ThreadDemo1 {
- // 继承Thread类 写法1
- static class MyThread extends Thread{
- @Override
- public void run() {
- //要实现的业务代码
- }
- }
- // 写法2
- Thread thread = new Thread(){
- @Override
- public void run() {
- //要实现的业务代码
- }
- };
- }
实现Runnable接口 。
- //实现Runnable接口 写法1
- class MyRunnable implements Runnable{
- @Override
- public void run() {
- //要实现的业务代码
- }
- }
- //实现Runnable接口 写法2 匿名内部类
- class MyRunnable2 {
- public static void main(String[] args) {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- //要实现的业务代码
- }
- });
- }
- }
实现Callable接口(Callable + FutureTask 创建带有返回值的线程) 。
- package ThreadDeom;
- import java.util.concurrent.Callable;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.FutureTask;
- /**
- * user:ypc;
- * date:2021-06-11;
- * time: 17:34;
- */
- //创建有返回值的线程 Callable + Future
- public class ThreadDemo2 {
- static class MyCallable implements Callable<Integer>{
- @Override
- public Integer call() throws Exception {
- return 0;
- }
- }
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- //创建Callable子对象
- MyCallable myCallable = new MyCallable();
- //使用FutureTask 接受 Callable
- FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
- //创建线程并设置任务
- Thread thread = new Thread(futureTask);
- //启动线程
- thread.start();
- //得到线程的执行结果
- int num = futureTask.get();
- }
- }
也可以使用lambda表达式 。
- class ThreadDemo21{
- //lambda表达式
- Thread thread = new Thread(()-> {
- //要实现的业务代码
- });
- }
Thread的构造方法 。
线程常用方法
获取当前线程的引用、线程的休眠 。
- class Main{
- public static void main(String[] args) throws InterruptedException {
- Thread.sleep(1000);
- //休眠1000毫秒之后打印
- System.out.println(Thread.currentThread());
- System.out.println(Thread.currentThread().getName());
- }
- }
- package ThreadDeom;
- /**
- * user:ypc;
- * date:2021-06-11;
- * time: 18:38;
- */
- public class ThreadDemo6 {
- public static void main(String[] args) throws InterruptedException {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- System.out.println("线程的ID:" + Thread.currentThread().getId());
- System.out.println("线程的名称:" + Thread.currentThread().getName());
- System.out.println("线程的状态:" + Thread.currentThread().getState());
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- },"线程一");
- thread.start();
- Thread.sleep(100);
- //打印线程的状态
- System.out.println("线程的状态:"+thread.getState());
- System.out.println("线程的优先级:"+thread.getPriority());
- System.out.println("线程是否存活:"+thread.isAlive());
- System.out.println("线程是否是守护线程:"+thread.isDaemon());
- System.out.println("线程是否被打断:"+thread.isInterrupted());
- }
- }
线程的等待 。
假设有一个坑位,thread1 和 thread2 都要上厕所。一次只能一个人上,thread2只能等待thread1使用完才能使用厕所。就可以使用join()方法,等待线程1执行完,thread2在去执行.
最后此篇关于彻底搞懂Java多线程(一)的文章就讲到这里了,如果你想了解更多关于彻底搞懂Java多线程(一)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!