-
简述程序、进程和线程之间的关系?什么是多线程程序?
答:程序:程序就是一段代码,一组指令的集合,不能单独运行,需要将其加载到内存中,系统为他分配资源后才能执行(,运行时就相当于一个进程。静态的实体)
进程:进程就是系统分配资源调用的一个独立单位。是程序的一次动态执行,从加载到执行到执行完毕是一个完整的过程,并且有自己的生命周期。(动态的实体)
线程:线程依赖于进程存在,一个线程相当于进程的某个任务。
多线程程序:一个程序运行时(进程)产生了不止一个线程,执行的路径有多条,就叫多线程 -
什么是线程调度?Java的线程调度采用什么策略?
答:线程调度:对处于可运行状态的多个线程对象进行系统级的协调,防止多个线程争用有限资源而导致系统死机或者崩溃
java的线程调度采用的策略:java 的调度策略是基于线程优先级的抢先式调度。意思就是,谁的优先级高那我就先给谁使用系统资源。 -
如何在Java程序中实现多线程?
答: Java中实现多线程有三种方式,
1)定义一个类继承自Thread类,重写run方法,然后创建这个类的对象,然后通过对象调用start方法启动线程。
2)定义一个类实现Runnable接口,重写run方法,然后创建一个这个类的子类对象,然后建Thread类的对象,
将子类对象作为参数进行传递,然后通过start方法启动线程。
3)线程池,使用ExecutorService、Callable、Future实现有返回结果的多线程。
4)JDK5以后新增了一个Executors工厂类来产生线程池,利用工厂类调用newFixedThreadPool方法,
创建一个线程池对象,然后用线程池对象调用submit方法,传入的参数是一个实现了Callable接口的子类,
重写了里面的call方法,submit方法相当于start方法,是用于启动线程的。 -
试简述Thread类的子类或实现Runnable接口两种方法的异同?
答:(1)继承Thread类,实现步骤
1)自定义一个类,继承自Thread类,然后重写里面的run方法
2)在主线程中创建自定义类的实例对象,通过调用start方法启动线程
(2)实现Runnable接口,步骤
1)自定义一个类实现Runnable接口并重写里面的run方法
2)在主线程中创建此类的实例对象
3)创建Thread类的实例对象,将自定义类的实例对象作为参数进行传递
4)通过start方法启动线程
这两个方法的共同点就是子类重写run方法,但是继承是重写Thread中的run方法,实现接口是Runnable中的run方法。
而且都需要start来启动线程,继续是通过其创建的子类对象来调用的,接口是将子类对象作为参数来传递给Thread,然后通过Thread的对象来调用start启动的。 -
说明缓冲流的优点和原理
答:缓冲流的优点:提高了效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次.
缓冲流原理:缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高。 -
在Java中wait()和sleep()方法的不同?
答:区别1:wait方法是在Object类中,而sleep方法是Thread类中
区别2:sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,
当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池, 只有针对此对象调用notify()方法后本线程才进入对象锁定池准备,获取对象锁进入运行状态。
java---线程相关练习
最新推荐文章于 2021-08-08 17:10:23 发布