程序员面试干货来啦,今天小编就先为大家整理出4道大厂面试时常见关于Java 的面试题。看看你能答对几道题呢!多多掌握此类面试题,就会增加面试通过的机率哦,后续还有其他类的面试题,请持续关注哟!
答:当多个线程访问同⼀个数据时,容易出现线程安全问题,需要某种⽅式来确保资源在某⼀时刻只被⼀个线程使⽤。需要让线程同步,保证数据安全线程同步 的实现⽅案:同步代码块和同步⽅法,均需要使⽤synchronized关键字 线程同步的好处:解决了线程安全问题 线程同步的缺点:性能下降,可能会带来死锁 2.在多线程编程⾥,wait⽅法的调⽤⽅式是怎样的? 答:wait⽅法是线程通信的⽅法之⼀,必须⽤在 synchronized⽅法或者synchronized代码块中,否则会抛出异常,这就涉及到⼀个“锁”的概念,⽽wait⽅法必 须使⽤上锁的对象来调⽤,从⽽持有该对象的锁进⼊线程等待状态,直到使⽤该上锁的对象调⽤notify或者notifyAll⽅法来唤醒之前进⼊等待的线程,以释放持有的 锁。 3.Java线程的⼏种状态 答:线程是⼀个动态执⾏的过程,它有⼀个从产⽣到死亡的过程,共五种状态: 新建(new Thread) 当创建Thread类的⼀个实例(对象)时,此线程进⼊新建状态(未被启动) 就绪(runnable) 线程已经被启动,正在等待被分配给CPU时间⽚,也就是说此时线程正在就绪队列中排队等候得到CPU资源。 例如:t1.start(); 运⾏(running) 线程获得CPU资源正在执⾏任务(run()⽅法),此时除⾮此线程⾃动放弃CPU资源或者有优先级更⾼的线程进⼊,线程将⼀直运⾏到结束。 死亡(dead) 当线程执⾏完毕或被其它线程杀死,线程就进⼊死亡状态,这时线程不可能再进⼊就绪状态等待执⾏。 ⾃然终⽌:正常运⾏run()⽅法后终⽌ 异常终⽌:调⽤stop()⽅法让⼀个线程终⽌运⾏ 堵塞(blocked) 由于某种原因导致正在运⾏的线程让出CPU并暂停⾃⼰的执⾏,即进⼊堵塞状态。 正在睡眠:⽤sleep(long t) ⽅法可使线程进⼊睡眠⽅式。⼀个睡眠着的线程在指定的时间过去可进⼊就绪状态。 正在等待:调⽤wait()⽅法。(调⽤motify()⽅法回到就绪状态) 被另⼀个线程所阻塞:调⽤suspend()⽅法。(调⽤resume()⽅法恢复) 4.请写出多线程代码使⽤Thread或者Runnable,并说出两种的区别。 ⽅式1:继承Java.lang.Thread类,并覆盖run() ⽅法。优势:编写简单;劣势:⽆法继承其它⽗类 public class ThreadDemo1 public static void main ( String args[] ) new MyThread1(); t.start(); while ( true System. out .println( ); class MyThread1 extends Thread public void run ( ) while ( true System. out .println( ); ⽅式 2 :实现 Java.lang.Runnable 接⼝,并实现 run() ⽅法。优势:可继承其它类,多线程可共享同⼀个 Thread 对象;劣势:编程⽅式稍微复杂,如需访问当 前线程,需调⽤ Thread.currentThread() ⽅法 public class ThreadDemo2 public static void main ( String args[] ) new MyThread2(); new Thread(mt); t.start(); while ( true System. out .println( ); class MyThread2 implements Runnable public void run ( ) while ( true System. out .println( ); 希望这些面试题对你有所帮助!下一期我们会有关于其他大厂面试题。别忘了关注我们的公众号哦,预防走丢! 最后愿你前程似锦,在冬深 在初春 在夏至在秋末 在码上未来! 码上未来,成就你更好的未来!