1,什么是线程:线程是cup工作的最近单位,多个线程组成一个进程
2.什么是线程安全:多线程同步进行,多次实验下来 得到的结果和单线程是一致的,其中的变量也是预期的,就可以成为线程安全
3.java项目是怎样被执行的: java文件被编译成.class文件,java类加载器加载到内存中,(jvm内存:1.java栈'2.方法区‘3.java堆’4.程序计数器);最终通过汇编指令来执行
4.线程同步的关键字 synchonized : 针对代码块上锁;针对方法上锁(保持同一把锁的话,需要 锁的对象一样:可以使用this 或者 类的字节码class对象)。synchonized使得多线程同步
5.wait()和notify() 让多线程之间通信。wait()和sleep()的区别:wait()方法释放锁,等待重新被唤醒,然后再次拿到锁。sleep()不会释放锁,只是让cup去暂停本线程,去执行其他的线程。
6.notify()方法和notofyAll()方法的区别:notify()方法是唤醒一个线程,并且把对象的锁赋予该线程;notifyAll是唤醒所有等待的线程,线程去抢夺对象的锁
7.创建线程的三种方法: 继承Thread类;实现Runnable()接口(一般多使用这个);Callable()可以捕捉异常的线程
8.start()方法和run()方法的区别:1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。
2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码; 程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。 记住:多线程就是分时利用CPU,宏观上让所有线程一起执行 ,也叫并发9.线程的周期:创建 (new )、就绪(start())、运行(run())、阻塞()和死亡()
10.线程池(Executors):固定数目线程池 缓存线程池 单一线程池 类比于数据库连接池
11.JAVA5里面的 Lock和Condition
Lock锁类似于 synchnozied,相比于synchonized,Lock更加面向对象
Condition类似于wait()和 notify(),condition相比于 更加灵活,在多个线程之间通信更加方便。Condition唤醒指定的一个线程,定义多个condition对象。
12.阻塞队列:ArrayBlockQueue 实现多线程的阻塞。自己模拟一个阻塞队列的代码。 一个put()的方法 一个take()方法,
13.多线程集合 hashMap对应 ConCurrentHashMap , ArrayList 对应 CopyAndWriteArrayList
14.线程和进程的关系:最小单位是线程,进程是由多个线程组成的。
15.内部类范文成员变量的时候,成员变量需要 final修饰。