进程和线程基础

目录

进程

线程

进程和线程两者的区别:

什么是线程安全?

如何确保线程安全?

1、synchronized

2、lock


1.进程和进程是什么?

进程:

  1. 进程是一个应用程序(软件),每一个进程的内部数据和状态都是完全独立,不共享的。

线程:

  1. 线程是一个进程中的执行单元,一个进程可以启动多个线程,执行不同的任务。

  2. 多线程共享堆内存和方法区的,但栈不共享,一个线程一个栈。

2.实现多线程的3种方式


1、采用继承的类实现多线程:编写一个类,直接继承java.lang.Thread类,重写run方法。

class MyThread extends Thread
//创建继承线程对象 
MyThread t = new MyThread()
//启动线程
t.start()

2、采用接口的方式实现多线程:编写一个类,实现java.lang.Runnable接口。(多采用此方法,面向接口编程,因为接口可以实现其他类)

        class MyRunnable implements Runnable
       //创建一个可运行的对象
        MyRunnable r = new MyRunnable();
        //将可运行的对象封装成一个线程对象
        Thread t = new Thread(new MyRunnable());
        //启动线程
        t.start();

3、采用匿名内部类
//第3种方法:采用匿名内部类(直接new 接口,构造对象)

//匿名内部类,这是通过一个没有名字的类,new出来的对象
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("分支线程");
            }
        });
        t.start()

什么是线程安全?

当多个线程访问某个方法时,不管你通过怎样的调用方式、或者说这些线程如何交替地执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。

什么时候存在线程安全问题?3个条件

1、多线程并发
2、有共享数据
3、共享数据有修改的行为

如何确保线程安全?

使用线程同步机制(让线程不能并发执行,而是排队执行)

1、synchronized

synchronized关键字,就是用来控制线程同步的,保证我们的线程在多线程环境下,不被多个线程同时执行,确保我们数据的完整性,使用方法一般是加在方法上。

synchronized(数据共享对象){
//线程同步代码块
}

当synchronized锁住一个对象之后,别的线程如果想要获取锁对象,那么就必须等这个线程执行完释放锁对象之后才可以,否则一直处于等待状态。

2、lock

Lock的引入让锁有了可操作性,就是我们在需要的时候去手动的获取锁和释放锁,甚至我们还可以中断获取以及超时获取的同步特性,但是从使用上说Lock明显没有synchronized使用起来方便快捷。

其实在Lock还有几种获取锁的方式,我们这里再说一种,就是tryLock()这个方法跟Lock()是有区别的,Lock在获取锁的时候,如果拿不到锁,就一直处于等待状态,直到拿到锁,但是tryLock()却不是这样的,tryLock是有一个Boolean的返回值的,如果没有拿到锁,直接返回false,停止等待,它不会像Lock()那样去一直等待获取锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值