Java多线程小记(待续)

什么是线程?

线程是进程的最基本执行单位,是CPU调度最小单位。

单线程和多线程有什么不同?

单线程执行任务时串行执行,需要一个任务完成后才能执行下一个任务;而多线程执行任务时可以并发执行,无需等待其它任务执行完毕才执行自身任务。

多线程有什么好处?

提高CPU资源利用率,提高处理任务的效率。

创建线程的方式?

1.继承Thread类,2.实现Runnable接口,3.实现Callable接口,其它2、3方式只是一个接口没有启动线程的能力,真正启动线程还是通过Thread类实现,而Thread类其实内部也是通过实现Runnable接口来创建线程的。

如何获取正在执行的线程信息?

可以通过Thread.currentThread()获取,toString方法返回的内容例如:

Thread[main,5,main] 第一个参数表示线程名,第二个参数表示线程的优先级,第三个参数表示线程组名称。

如何获取线程和设置线程名称?

通过 线程.getName()获取,通过线程.setName()设置,setName方法是线程同步的,说明多个线程同时调用该方法不会有线程安全问题。

线程中run方法和start方法的区别?

run方法和start方法都是在Thread类中,run方法是非同步方法,用于存放任务代码,不会产生新线程,可以被执行多次,而start方法是同步方法,用于启动线程,会产生一个新线程,不能被调用多次,否则会报线程状态异常。

什么是线程的优先级?

线程的优先级是指线程被CPU优先执行的概率等级,优先级越高表示线程被优先执行的概率越大,但最终执行顺序由CPU调度算法决定,java线程中优先级有1-10级,默认不设置线程优先级是5,可以通过线程.getPriority()获取;设置优先级可通过线程.setPriority()方法设置,内置常量有MIN_PRIORITY=1,NORM_PRIORITY=5,MAX_PRIORITY=10

怎样让线程睡眠?

可用静态方法Thread.Sleep(毫秒)来设置

注:时间参数不能传负数,否则报非法参数异常,线程休眠中突然中断会报中断异常。

除了指定毫秒数,还能指定纳秒,范围是0-99999,不在范围内的值会报非法参数异常

可通过Thread.Sleep(毫秒,纳秒)设置。

如何优雅的中断线程?

可通过interrupt非静态方法来中断线程,在线程任务处理区通过isInterrupted 或interrupted来判断是否需要中断线程break退出任务循环,其中interrupted会在中断结束后恢复标记。

如何让线程放弃执行权?

可通过Thread.yield()方法。

如何等待线程死亡,亦或是怎么让两个线程a和b开始执行有先后顺序?

可通过线程对象.join()方法实现,即在b线程run中调用a线程的join方法,这样a线程执行结束死亡后,b线程run方法才会向下执行。

 线程A如何随着主线程的结束而结束?(什么是守护线程【后台线程】)

可通过给线程A设置为守护线程(后台线程),这样主线程执行结束后,线程A也会执行结束,线程是否为后台线程也可通过isDaemon()来判断

如何判断线程是否存活?

可通过isAlive()方法判断。

synchronized 的作用?

可以给对象、方法或代码块加锁,但锁定一个方法或代码块时,表示同一时间最后只有一个线程执行这段代码,即被synchronizd修饰括号内的代码

同步锁的作用?

同步锁是为了保证每个线程都能正常执行原子不可更改操作。

synchronized修飾同步代码块、同步方法、静态同步方法有什么区别?

修饰同步代码块时,锁类型可以是对象类型、this或者类类型

修饰同步方法,锁住的是this,即当前方法被调用的对象

修饰静态同步方法,锁住的是类类型

什么情况下回造成线程阻塞?

由于每个对象都由一把锁,多个线程争夺同一把锁会造成线程阻塞,有可能是线程休眠没释放锁导致,不同线程争夺不同的锁不会造成线程阻塞,例如:

同一把锁:先输出thread-0 睡醒了,后再输出Thread-1人人都是程序员

 不同锁情况:先输出Thread-1人人都是程序员,后再输出thread-0 睡醒了,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值