1. 线程的组成部分有?
CPU时间片:操作系统会为每个线程分配执行时间
运行数据: 堆空间:存储线程需使用的对象,多个线程可以共享堆中的对象。
栈空间:存储线程需使用的局部变量,每个线程都拥有独立的栈。
线程的逻辑代码
2. 线程的两种创建方式是?(代码举例)
public static void main(String [] args){
MyThread t1 = new MyThread();
t1.start();
}
}
class MyThread extends Thread{
public void run(){
for(int i = 1;i<=50;i++){
System.out.println("MyThread:"+i);
}
}
}
//创建线程方式2
public class TestCreateThread{
public static void main(String[] args){
MyRunnable mr = new MyRunnale();
Thread t2 = new Thread(mr);
t2.start();
}
}
class MyRunnable implements Runnable{
public void run(){
for(int i = 1; i<-50;i++){
System.out.println("MyRunnale:"+i);
}
}
}
}
3. 线程有哪些状态?
初始状态
就绪状态
运行状态
终止状态
- 什么叫线程不安全?
当多个线程并发访问临界资源时间,如果破坏原子操作,可能会造成数据不一致。
临界资源:
共享资源(同一对象),一次仅允许一个线程使用,才可保证其正确性。
原子操作:不可分割的多步操作,视作一个整体,其顺序和步骤不可打乱或缺省。
5. 简述同步代码块的作用?
为方法中的局部代码(原子操作)加锁。