Java学习笔记:线程安全问题

1、多线程的实现:
(1)继承Thread类:主函数中通过创建多个SubThread类对象,并调用其start()方法。SubThread类对象中属性数据独占。

(2)实现Runnable接口:主函数中创建一个Runnable接口实现类对象,同时创建多个Thread类对象,并传入接口对象,通过各Thread对象的start()方法进行多线程操作。 Runnable接口实现类对象中属性数据本身已经共享。
两种方法均重写run()方法【注意:不是重载*】来完成多线程需要完成的工作。

2、线程安全:
(1)同步代码块:
将操作共享资源的代码块通过synchronized (lock){操作共享资源的代码块}进行同步;其中lock是锁(也即同步监视器),由一个类的对象充当(所有线程必须公用该锁,所以在实现Runnable方式中可以直接使用this,或者接口中定义的一个任意属性对象;但是在继承方式中,必须要慎重使用this,常通过使用定义成static的全局属性对象充当锁)

(2)同步方法:
将 操作共享资源的代码块 定义为一个synchronized方法,在run()方法中调用该synchronized的方法,其默认的锁是this,对于实现实现Runnable接口的方式,可以保证线程安全;但是对于继承实现的,不能够保证线程安全

3、线程通信
wait()、 notify() 、notifyAll()方法,必须在synchronized的方法或者synchronized代码块中,当前线程获取了锁,立即通过notify()或notifyAll()唤醒其他的等待线程、然后当前线程执行完同步代码块,通过wait()方法进入等待状态,释放当前占用的锁;其他线程由于之前已经被唤醒,可以抢占锁执行同步代码块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种广泛使用的编程语言,有简单、面向对象、跨平台等特点。下面是Java学习的一些重要知识点和学习笔记: 1. Java基础: - 数据类型:Java提供了多种数据类型,包括基本数据类型和引用数据类型。 - 控制流程:学习如何使用条件语句(if-else、switch)、循环语句(for、while)等控制程序的流程。 - 数组:了解如何声明、初始化和操作数组。 - 方法:学习如何定义和调用方法,以及方法的参数和返回值。 - 类和对象:理解类和对象的概念,学习如何定义类、创建对象和使用类的成员变量和方法。 - 继承和多态:掌握继承和多态的概念,了解如何使用继承创建子类,并实现方法的重写和多态的应用。 2. 面向对象编程: - 封装:学习如何使用访问修饰符(public、private、protected)来控制类的成员的访问权限。 - 继承:了解继承的概念和作用,学习如何使用extends关键字创建子类。 - 多态:理解多态的概念和实现方式,学习如何使用父类引用指向子类对象,实现方法的动态绑定。 3. 异常处理: - 异常的分类:了解异常的分类(Checked Exception和Unchecked Exception)和常见的异常类型。 - 异常处理机制:学习如何使用try-catch语句捕获和处理异常,以及使用throws关键字声明方法可能抛出的异常。 4. 输入输出: - 文件操作:学习如何读写文件,包括使用File类、字节流和字符流等。 - 序列化:了解对象的序列化和反序列化,学习如何将对象保存到文件或网络中。 5. 集合框架: - 学习Java提供的集合框架,包括List、Set、Map等常用的集合类,以及它们的特点和用法。 6. 多线程编程: - 学习如何创建和管理线程,了解线程同步和线程间通信的方法。 7. 数据库连接: - 学习如何使用Java连接数据库,执行SQL语句,进行数据的增删改查操作。 以上是Java学习的一些重要知识点和学习笔记,希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值