多线程知识点详解

本文详细介绍了多线程的概念,包括线程与进程的区别、多线程的优点。讲解了多线程的实现方式,如继承Thread、实现Runnable、使用Callable和线程池。对比了run()与start()方法的不同,探讨了线程同步的各种机制,如synchronized、volatile、ReentrantLock和ThreadLocal。同时,分析了sleep()与wait()的区别,并讨论了线程的终止方法及synchronized与Lock的异同。
摘要由CSDN通过智能技术生成

多线程

什么是线程,进程

线程是指程序在执行过程中,能够执行程序代码的一个执行单元;主要状态有四种:运行、就绪、挂起和结束。

进程是指一段正在执行的程序;进程可以有多个线程。

多线程的优点

  • 使用多线程可以减少程序的相应时间
  • 与进程相比,线程的创建和切换开销更小
  • 多CPU或者多核计算机本身就具有执行多线程的能力,可以提高cpu的利用率
  • 使用多线程可以简化程序的结构,使程序更加便于理解和维护。

多线程实现方法

  • 继承 Thread 类,重写run()方法;
  • 实现 Runnable 接口,并实现该接口的 run() 方法
  • 实现 Callable 接口,重写 call() 方法
  • 线程池的使用

run() start()方法有什么区别

通过调用线程类的 start() 方法,才能运行真正的多线程。直接调用 run() 方法,是不能运行真正的多线程的。系统通过调用线程类的 start() 方法启动一个线程,JVM 通过调用 run() 方法,来完成实际的操作。

多线程同步的实现方法

同步方法

即有synchronized关键字修饰的方法。
由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,
内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

public synchronized void save(){
   }

注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类

同步代码块

即有synchronized关键字修饰的语句块。
被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

代码如: 
synchronized(object){
    
}

注:同步是一种高开销的操作,因此应该尽量减少同步的内容。
通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。

package com.xhj.thread;
    /**
     * 线程同步的运用
     */
    public class SynchronizedThread {
   

        class Bank {
   
            private int account = 100;

            public int getAccount() {
   
                return account;
            }

            /**
             * 用同步方法实现
             * @param money
             */
            public synchronized void save(int money) {
   
                account += money;
            }

            /**
             * 用同步代码块实现
             * 
             * @param money
             */
            public void save1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值