面试官,别再问我了---线程和synchronized

1.start()和run()方法区别?

start()方法开启线程,无需等待run方法体代码执行完毕而直接执行下面的代码.

run()方法是线程体,包含了要执行的这个线程的内容,run()方法运行结束,此线程随即终止.如果直接调用run方法,程序中依然只有主线程这一个线程.

2.synchronized与lock的区别?

synchronized是java的关键字,在jvm层面上,lock是一个类
synchronized,假如A获得线程,B线程一直等待.lock获取锁,线程可以不用一直等待.
synchronized无法判断锁的状态, lock可以判断.而且lock是可重入,公平的.

3.synchronized和volatile的区别?

volatile只能使用在变量级别,synchronized可以使用在变量, 类, 方法上.
一个线程修改volatile修饰的共享变量,其它线程可以立即可见.synchronized修饰的变量,只能在当前线程访问,其它线程阻塞.
volatile不会造成线程的阻塞.synchronized可能会造成线程的阻塞.

4.sleep()方法和wait()方法的区别?

sleep()方法属于Thread类中,wait()方法是属于Obejct类.
调用sleep()方法,线程不会释放对象锁,而wait()方法会释放.

线程内数据共享问题

ThreadLocal 如 银行转账,需要在一个事务中完成,使用相同的数据库连接对象,而又是两个不同的账户对象.

多线程共享数据:

1.多个线程行为一致,共同操作一个数据,共用一个实现Runnable接口对象,把数据设为全局的静态变量即可.
2.多个线程行为不一致,共同操作一个数据,需要使用不同的Runnable对象,把共享数据放到另一个对象中,然后将这个对象传递给各个Runnable对象,每个线程对共享数据的操作方法也分配到那个对象身上去完成,这样即可.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值