线程、同步、线程池

本文详细介绍了Java中的多线程概念,包括线程的创建(通过继承Thread类和实现Runnable接口)、线程安全与线程同步(使用synchronized关键字和Lock锁机制),以及线程池的工作原理和使用。讨论了线程间的通信、线程状态,并给出了线程池的使用示例和其带来的优势。
摘要由CSDN通过智能技术生成

一、线程
创建线程的方式一:
1.继承Thread类
包名:java.lang.Thread
构造方法:
Thread()创建新线程
Thread(String name)指定名字的新线程
Thread(Runnable target) 有指定目标的线程
Thread(RUnnable target,String name)创建一个带有目标的线程并指定名字
常用方法:
getName:获取线程名称
start:启动线程,调用线程中的run 方法
run:线程要执行任务的代码
sleep:线程要多久才执行,暂停多久
currentThread:返回正在执行的当前线程的引用
2.创建线程的方式二:实现Runnable接口,线程创建有两种方式,第一种无参的,第二种有参的,就是Runnabl接口,接口不能直接new对象,需要一个实现类来实现接口,重写run方法即可,测试类调用即可,
3.创建对象 public Thread(Runnable target)
4.第一种和第二种相比,推荐第二种
5.*Thread和Runnable的区别:
实现Runnable比Thread具有的优势:
1)适合多个相同的代码程序共享一个资源,
2)避免java单继承的局限性
3)增强代码健壮性,实现解耦,代码可以被多个线程继承,代码和线程独立
4)线程池只能放入Runnable和Callable类,不能放入被Thread继承的类
6.线程安全
原因:是由于静态变量和全局变量产生的,若每个线程都对全局变量和静态变量进行读操作,没有写操作,那么这个全局变量就是安全的,若是有多个线程同时进行写操作,就要考虑线程同步的问题,否则容易引起线程安全问题

二、线程同步
使用synchronized关键字来解决线程安全问题,使用synchronized修饰线程部分,使得当该线程使用此资源时,其他线程不能修改,等待线程修改数据完毕之后,其他线程才可以进入cpu,保证了数据的同步性,解决了线程的安全问题

1.为了让java中的每一个线程都可以运行,java引入了线程同步机制。线程同步机制:1.同步代码块2.同步方法3.锁机制
1)同步代码块:使用synchronized修饰线程的某一个地方,导致线程互斥访问,就是该线程在cpu操作时,其他线程禁止访问,保证数据的同步性,
格式:synchronized(同步锁){需要同步操作的程序}
同步锁:对象的同步锁只是一个概念,理解为在对象上做标记:锁可以是任意类型,多个线程可以共用锁
注意:在同步线程中,最多允许一个线程拿到锁,谁拿到,谁执行,其他的只能在外面等待
2)同步方法:使用synchronized修饰的方法,叫同步方法,保证一个线程在运行的时候,其他线程只能在外面等待,
格式:public synchronized void method(){}
同步锁:对于非static方法,同步锁就是this;对于static,就是当前方法对象所在的字节码对象(类名.class)
3)Lock锁机制:
java.util.concurrent.lock.Lock提供了比synchroniezd代码块和synchronized方法更加强大的操作,前两个有的,他都有,其次还有其他更加强大的功能;
常用方法:lock加同步锁,unlock释放锁

2.线程的状态
new新建一个线程:线程刚刚被创建,并未启动
Runnable可运行:现在在Java虚拟机中运行的状态,可能正在运行,也可能没有,却决于操作系统处理器
Blocked锁阻塞:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值