程序员Java

什么是多线程?看我多线程七十二变,你能记住吗?

2020-09-24  本文已影响0人  小美人鱼失去的腿

1、什么是线程

1.1、什么是多线程?
1.2、并行和并发
1.3、同步和异步

2、多线程的应用场景

3、启动线程的方法

3.1、继承Thread
public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i <100 ; i++) {
            System.out.println("hello 我是"+Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();//一个线程不能调用两次以上的start方法 IllegalThreadStateException
    }
}

3.2、实现Runnable接口
public class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("Runnable :"+ Thread.currentThread().getName());
    }
     public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread  = new Thread(myRunnable);
        thread.start();
        //匿名内部类写法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类"+Thread.currentThread().getName());
            }
        }).start();
        //lambda表达式写法
        new Thread(() ->{
            System.out.println("lambda:"+Thread.currentThread().getName());
        }).start();
     }
}

3.3、实现Callable接口(有返回值)
public class MyCallable implements Callable<Long> {//需指定返回值类型
    @Override
    public Long call() throws Exception {
        return 1+1L;
    }

    public static void main(String[] args) {
        //创建MyCallable对象
        MyCallable myCallable = new MyCallable();
        //创建FutureTask对象
        FutureTask<Long> futureTask = new FutureTask<>(myCallable);
        //创建线程对象
        Thread thread = new Thread(futureTask);
        thread.start();
        try {
            System.out.println("获得结果:"+futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

4、线程的启动和停止

4.1、线程启动
4.2、线程停止

5、线程的睡眠

6、后台进程

7、线程的合并

8、线程的优先级

9、线程的生命周期

[图片上传失败...(image-f8805d-1600949547611)]

  1. 新建:对象刚被创建出来,还没有调用start
  2. 就绪:调用了start,但没有抢到CPU,不能执行
  3. 运行:抢到了CPU,正在执行run
  4. 阻塞:线程遇到某些情况,暂停执行
  5. 死亡:run方法执行完

10、线程同步问题

10.1、为什么会出现线程同步问题?
10.2、线程同步问题的解决方案(上锁机制)

11、单例模式

12、volatile关键字

在这里插入图片描述 image.png

13、线程死锁

public class LockTest {
    private static Object lock1 = new Object();
    private static Object lock2 = new Object();
    public static void main(String[] args) {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                synchronized (lock1){
                    synchronized (lock2){
                        System.out.println("thread1------------"+i);
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        Thread thread2 = new Thread(()->{
            for (int i = 0; i < 100; i++) {
                synchronized (lock2){
                    synchronized (lock1){
                        System.out.println("thread2------------"+i);
                    }
                }
            }
        });
        thread1.start();
        thread2.start();
    }
}

14、线程的等待和通知

15、wait和sleep的区别?

16、生产者消费者模式

17、阻塞队列

18、线程池

18.1、线程的作用?
18.2、线程池API
public static void myselfThreadPool(){
        int processors = Runtime.getRuntime().availableProcessors();
        System.out.println(processors);
        int n = 2;
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(processors * n, processors * n, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
        for (int i = 0; i < 10; i++) {
            threadPool.execute(()->{
                System.out.println("当前执行的是"+Thread.currentThread().getName());

            });

        }
        threadPool.shutdown();
    }

19、ThreadLocal

19.1、ThreadLocal是什么?
19.2、syncronized 与 ThreadLocal的区别?
19.3、ThreadLocal的优点?
19.4、ThreadLocal使用场景
在这里插入图片描述
上一篇下一篇

猜你喜欢

热点阅读