b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

在使用Java多线程过程中可能出现的问题和解决方案

电脑杂谈  发布时间:2020-07-03 01:10:17  来源:网络整理

java怎么解决线程死锁_多线程技术问题解决_解决线程死锁

1. 死锁

在实际的网络程序开发中,多线程程序设计在客户端程序实现中使用相对简单,但在服务器端程序实现中,不仅大量使用,而且存在更多的问题. 客户.

另一个容易在服务器端出现的多线程问题是死锁. 死锁意味着两个或多个线程无限期地等待以便使用关键资源. 让我们使用上一个浴室的示例来说明死锁. 例如,两个人同时到达洗手间,两个人都更加礼貌. 第一和第二个人说: 您第一,第二和第一个人说: 您第一. 这两个人互相有礼貌,没有人进入. 这种现象是一个僵局. 这里的两个人就像线程,而洗手间是这里的关键资源,并且由于这两个线程始终是谦虚的,因此没有人使用关键资源.

死锁不仅使程序无法实现预期的功能,而且浪费了系统资源,因此对服务器端程序更有害. 在实际的服务器端程序开发中,您需要注意避免死锁.

检测死锁比较麻烦,不一定每次都发生. 在测试服务器端程序时,这需要耐心,并且在执行程序时仔细观察性能检测. 如果发现执行性能大大降低,则很可能发生了死锁,然后找到死锁的原因并解决死锁问题.

造成死锁的最根本原因是逻辑处理不严格,考虑时还不够彻底,因此通常需要修改程序逻辑来解决死锁.

2. 线程优先级

在日常生活中,例如火车票窗口,您经常会看到“ XXX优先级”,那么在多线程编程中是否可以将每个线程设置为优先级?

在多线程编程中,支持为每个线程设置优先级. 具有较高优先级的线程在排队等待执行时将获得更多的CPU执行时间,并获得更快的响应. 在实际程序中,可以根据逻辑需求将需要及时处理的线程设置为较高的优先级,而将不需要大量时间的线程设置为较低的优先级.

在“线程”类别中,总共指定了三个优先级:

l MAX_PRIORITY-最高优先级

l NORM_PRIORITY——普通优先级也是默认优先级

l MIN_PRIORITY-最低优先级

在之前创建的线程对象中,由于未设置线程优先级,因此线程的默认优先级为NORM_PRIORITY. 在实际使用中,您还可以使用Thread类中的setPriority方法来根据需要设置线程的优先级. 该方法的声明为:

公共最终无效setPriority(int newPriority)

假设t是一个初始化的线程对象,则需要将t的优先级设置为最高,那么实现代码为:

t. setPriority(Thread. MAX_PRIORITY);

这样,当线程执行时,它将获得更多的执行机会,即优先执行. 如果出于安全原因不允许设置线程优先级,则将引发SecurityException.

多线程技术问题解决_解决线程死锁_java怎么解决线程死锁

下面使用一个简单的线程输出数字多线程技术问题解决,以演示线程优先级的使用. 实现的示例代码如下:

打包优先级;

/ **

*测试线程优先级

*作者,http: //www.5a520.cn

* /

公共类TestPriority {

public static void main(String [] args){

PrintNumberThread p1 =新的PrintNumberThread(“高优先级”);

PrintNumberThread p2 =新的PrintNumberThread(“正常优先级”);

PrintNumberThread p3 =新的PrintNumberThread(“低优先级”);

p1.setPriority(Thread.MAX_PRIORITY);

p2.setPriority(Thread.NORM_PRIORITY);

p3.setPriority(Thread.MIN_PRIORITY);

p1.start();

p2.start();

p3.start();

}

解决线程死锁_多线程技术问题解决_java怎么解决线程死锁

}

打包优先级;

/ **

*输出数字的线程

* /

公共类PrintNumberThread扩展了线程{

字符串名称;

公共PrintNumberThread(字符串名称){

this.name = name;

}

public void run(){

尝试{

for(int i = 0; i <10; i ++){

System.out.println(name +“: ” + i);

}

}抓住(异常e){}

}

}

解决线程死锁_多线程技术问题解决_java怎么解决线程死锁

程序的执行结果为:

高优先级: 0

高优先级: 1

高优先级: 2

普通优先级: 0

高优先级: 3

普通优先级: 1

高优先级: 4

普通优先级: 2

高优先级: 5

高优先级: 6

高优先级: 7

高优先级: 8

高优先级: 9

普通优先级: 3

普通优先级: 4

普通优先级: 5

普通优先级: 6

解决线程死锁_多线程技术问题解决_java怎么解决线程死锁

普通优先级: 7

普通优先级: 8

普通优先级: 9

低优先级: 0

低优先级: 1

低优先级: 2

低优先级: 3

低优先级: 4

低优先级: 5

低优先级: 6

低优先级: 7

低优先级: 8

低优先级: 9

在此示例程序中,PrintNumberThread线程的功能是输出数字. 每个数字输出之间没有时间延迟. 在测试类TestPriority中创建三个PrintNumberThread类型的线程对象多线程技术问题解决,然后将线程优先级设置为最高. ,正常和最小值,然后启动线程执行程序. 从执行结果可以看出,高优先级线程获得了更多的执行时间,并且执行首先完成,而低优先级线程具有较低的优先级,因此最后执行结束.

实际上,线程优先级的管理主要是通过系统的线程调度来实现的. 首先执行优先级更高的线程,因此可以通过设置线程的优先级来影响线程的执行.

3摘要

关于多线程有很多基础知识. 在本章中,我们介绍线程的概念,线程的实现以及使用多线程时将遇到的问题和解决方案. 并发编程的概念需要更多的实践,了解多线程的概念并熟悉多线程编程.

在熟悉线程的基本概念之后,可以更深入地学习有关多线程编程的高级知识,例如线程组.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-266379-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...