Java多线程知识怎么学?如何成为高薪Java工程师?很多初学Java的同学通常会对进程和线程傻傻分不清,进程和线程都是由操作系统所体会的程序运行的基本单元,一个程序至少有一个进程,一个进程至少有一个线程。下面就给大家梳理一下多线程相关的知识点。
什么是多线程呢?即就是一个程序中有多个线程在同时执行。使用多线程优势明显,比如充分发挥多核CPU的优势、防止阻塞、便于建模。
如何创建线程呢?主要有两种方式:1)继承Thread类;2)实现Runnable接口。实现接口的方式比继承类的方式更灵活,也能减少程序之间的耦合度,面向接口编程也是设计模式6大原则的核心。
线程的优先级有哪些?优先级分为1-10共10个等级,1表示最低优先级,5是默认级别;
t.setPriority()用来设定线程的优先级,需要在线程开始方法被调用之前进行设定;
可以使用MIN_PRIORITY(1),MAX_PRIORITY(10),NORM_PRIORITY(5)来设定优先级。
实现线程同步的方法有哪些?1)同步方法,即有synchronized关键字修饰的方法;2)同步代码块,即有synchronized关键字修饰的语句块;3)使用重入锁实现线程同步;4)使用ThreadLocal实现线程同步。
如何停止一个正在运行的线程?1)使用退出标志,使线程正常退出,也就是run方法完成后线程终止;2)使用stop方法强行终止线程,不推荐,因为和suspend、resume等一样,都是过期作废的方法,可能产生不可预料的结果;3)使用interrupt方法,而interrupt方法并未真正停止线程,只不过在线程中打了一个标记;此时可以使用抛异常的方式,也可以使用return的方式结束线程,不过推荐使用前者,因为可以继续向上抛,具有更好的连通性。
一个线程如果出现了运行时异常会怎么样?如果这个异常没有被捕获,这个线程就停止执行。如果这个线程持有某个某个对象的监视器,那么这个对象监视器会被立即释放。
如何在两个线程之间共享数据?通过在线程之间共享对象就可以,然后通过wait/notify/notifyAll、await/signal/signalAll进行唤起和等待,比方说阻塞队列BlockingQueue就是为线程之间共享数据而设计的。
为什么要使用线程池?避免频繁地创建和销毁线程,达到线程对象的重用。另外,使用线程池还可以根据项目灵活地控制并发的数目。
什么是线程安全?有哪些级别?线程安全:如果你的代码在多线程下执行和单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。线程安全有几个级别:不可变、绝对线程安全、相对线程安全、线程非安全。
Java中如何获取到线程dump文件?死循环、死锁、阻塞、页面打开慢等问题,打线程dump是最好的解决问题的途径。所谓线程dump也就是线程堆栈,获取到线程堆栈有两步:1)获取到线程的pid,可以通过使用jps命令,在Linux环境下还可以使用ps -ef | grep java;2)打印线程堆栈,可以通过使用jstack pid命令,在Linux环境下还可以使用kill -3 pid。
想成为高薪Java工程师,你需要理论与实战兼备,而良好的知识基础是你高效率学习、付诸实战的前提。如果你想更好的学习Java编程,可以选择专业的学习方式。