目录
并行和并发有什么区别?
线程和进程有什么区别?
创建线程有哪几种方式?
runnable和callable有什么区别?
线程的状态及转换?
sleep()和wait()的区别?
run()和start()有什么区别?
在Java程序中怎么保证多线程的运行安全?
什么是悲观锁?
什么是乐观锁?常见的两种实现方式?有什么缺点?
无泪的憋屈缝成了一张隐形披风偶而还能抵挡酷寒,无用的大喊苦苦等到的回声只是力气放尽的绝望
话不多说,发车!
并行和并发有什么区别?
线程和进程有什么区别?
创建线程有哪几种方式?
1、继承thread类,重写run方法
package juc.thread;
public class MyThread extends Thread{
@Override
public void run(){
int i = 0;
while (true){
if(i == 100) break;
i++;
}
System.out.println(i);
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
2、实现runnable接口,重写run方法
package juc.thread;
public class MyThread implements Runnable{
@Override
public void run() {
int i = 0;
while (true){
if(i == 100) break;
i++;
}
System.out.println(i);
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
}
}
3、使用callable和futureTask:实现callable接口,再使用future类来包装callable对象
package juc.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class MyThread {
public static void main(String[] args) {
MyThread myThread = new MyThread();
FutureTask futureTask = new FutureTask<>(
(Callable)()->{
return 1;
}
);
new Thread(futureTask,"有返回值的线程").start();
}
}
4、使用线程池:Excutor框架
runnable和callable有什么区别?
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface Runnable
is used
* to create a thread, starting the thread causes the object's
* run
method to be called in that separately executing
* thread.
*
* The general contract of the method run
is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
//返回值是void
public abstract void run();
}
@FunctionalInterface
public interface Callable {
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call() throws Exception;
}
线程的状态及转换?
sleep()和wait()的区别?
run()和start()有什么区别?
在Java程序中怎么保证多线程的运行安全?
什么是悲观锁?
它认为多线程同时修改资源的概率比较高,很容易出现冲突,所以它在访问资源之前需要先加锁,synchronized就是基于这种思想;主要用于写比较多的情况
它会先修改资源,再验证这段时间内有没有其他线程正在修改资源,如果没有,那么操作完成;如果有,就放弃本次操作;因为它全程没有加锁,所以又叫无锁编程;主要用于多读或者加锁成本比较高的场景
实现方式:
缺点:
整理面经不易,觉得有帮助的小伙伴点个赞吧~感谢收看!