关于Java进程和悲观锁、乐观锁

一:什么是进程?

1.正在运行的程序(软件)就是一个独立的进程。

2.线程是属于进程的,一个进程中可以同时运行很多个线程。

3.进程中的多个线程其实是并发和并行执行的。

二:并发与并行

1.并发:进程中的线程是由CPU负责调度执行的,但CPU能同时处理线程数量有限,为了保证全部线程都能往前执行,CPU会轮询为系统的每个线程服务,由于CPU切换的速度很快,给我们的感觉这些线程在同时执行,这就是并发。

2.并行:在同一个时刻上,同时有多个线程在被CPU调度执行。

3.多线程到底是怎么在执行的?

并发与并行同时进行的!

三:线程的生命周期

1.也就是线程从生到死的过程中,经历的各种状态及状态转换。

2.理解线程这些状态有利于提升并发编程的理解能力

四:Java的线程状态

1.Java总共定义了6种状态

2.6种状态都定义在Thread类的内部枚举类中。

3.线程的6种状态互相转换

4.线程的6种状态总结

NEW(新建) 线程刚被创建,但是并未启动

Runnable(可运行) 线程已经调用了start(),等待CPU调度

Blocked(锁阻塞) 线程在执行的时候未竞争到锁对象,则该线程进入Blocked状态

Waiting(无限等待) 一个线程进入Waiting状态,另一个线程调用notify或者notifyAll方法才能够唤醒

Timed Waiting(计时等待) 同Waitin状态,有几个方法(sleep,wait)有超时参数,调用他们将进入Time Waiting状态

Teminated(被终止) 因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡

---------------------------------------------------------------------------------------------------------------------------------

一:悲观锁

1.一上来就加锁,没有安全感,每次只能一个线程进入访问完毕后,再解锁。线程安全,性能较差!

2.示例:

public class MyRunnabless implements Runnable{
    private int count;
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            synchronized (this) {
                System.out.println(Thread.currentThread().getName() + "count------->"+(++count));
            }
        }
    }
}

二:乐观锁

1.一开始不上锁,认为是没有问题的,大家一起跑,等要出现线程安全问题的时候才开始控制。线程安全,性能较好!

2.示例:

import java.util.concurrent.atomic.AtomicInteger;

public class MyRunnabless implements Runnable{
    //整数修改的乐观锁:原子类实现的
    private AtomicInteger count = new AtomicInteger();
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "count------->"+count.incrementAndGet());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值