简述对线程优先级和进程的理解以及创建方式?

个人对线程优先级和进程的理解以及创建方式的总结?

进程(Process):是操作系统进行资源调度的基本单位,进程是计算机程序一个数据集合的一次运行活动,进程是由程序、数据和PCB(Process Control Block)组成。在面向对象设计中,进程也是线程的容器。
线程(Threading):是操作系统的运算调度最小单位,是进程的实际运作单位。

线程和进程关系
1.进程之间相互独立运行,一个进程内的线程无法在其他进程中看到。
2.线程无法独立运行,必须包含在一个进程中。
3.一个进程至少包含一个线程(称为主线程),main方法就是典型的主线程。
4.一个进程可以并发多个线程,每条线程可以并行执行任务,所有线程共享该进程的地址空间和内存资源(称为多线程)。

创建子线程的方式
1.继承 Thread 类创建其子类。重写run方法实现线程的功能,可通过构造方法指定线程名,通过调用 start( )方法来启动线程。
2.自定义类实现 Runnable 接口,重写run方法。创建实现 Runnable 接口的类对象,通过创建 Thread 对象,调用start方法来启动线程。
3.使用 Callable 接口和Future接口创建线程。
(1)创建 Callable 接口的实现类,并实现Call()方法。
(2)使用 Future接口 的实现类 FutureTask 类来包装Callable对象。
(3)创建 FutureTask 类对象并启动线程。
与上述俩个方法不同,Callable()接口中的Call()方法有返回值和抛出异常。
4.创建线程池来创建子线程,Java通过Executors类提供四种线程池,分别为:
(1)newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,若无线程可回收,有则新建线程。
(2)newFixedThreadPool:创建一个固定数量线程的线程池,可控制线程最大并发数,超出的线程会在队列中等待。
(3)newScheduledThreadPool:创建一个固定数量线程的线程池,支持定时及定期的执行任务。
(4)newSingleThreadExecutor:创建一个固定数量线程的线程池,且数量为一,保证所有任务按照指定顺序(FIFO(), LIFO(), 优先级)执行。
使用以上方法创建线程池的优点:控制线程池的重用率,可以使用控制线程池的并发数,避免线程因争夺资源而阻塞,可以进行更有效的管理。
缺点:会出现OOM(out of memory)内存溢出问题,会影响程序的稳定性。

线程状态:

线程有新建、就绪、运行、、阻塞、终止五种状态。
① 当Thread对象创建后,线程并没有启动,处于新建状态。
② 当调用start()方法后,线程会启动并进入就绪状态。
③ 处于就绪状态的线程如果得到了CPU, 就进入运行状态。
④ 因某些原因造成线程不能继续运行,如:调用了sleep()方法,此时线程处于阻塞状态,sleep时间到后会再次进入就绪状态。
⑤ 线程执行完所有指令后,便进入终止状态,且就不能再进入其它状态了。

线程优先级
Java把线程优先级分为10级,用1至10的整数表示,数值越大,优先级越高。在Thread类中定义了三个优先级常量:MIN_PRIORITY,NORM_PRIORITY和 MAX_PRIORITY ,其值分别为1, 5,10。线程默认优先级为NORM_PRIORITY。
Java中如果多个线程具有相同的优先级,则按"先来先服务"的原则调度,可以用yield()静态方法来让当前线程主动放弃CPU,执行下一个同级别的线程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值