
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.

下面使用一个简单的线程输出数字多线程技术问题解决,以演示线程优先级的使用. 实现的示例代码如下:
打包优先级;
/ **
*测试线程优先级
*作者,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();
}

}
打包优先级;
/ **
*输出数字的线程
* /
公共类PrintNumberThread扩展了线程{
字符串名称;
公共PrintNumberThread(字符串名称){
this.name = name;
}
public void run(){
尝试{
for(int i = 0; i <10; i ++){
System.out.println(name +“: ” + i);
}
}抓住(异常e){}
}
}

程序的执行结果为:
高优先级: 0
高优先级: 1
高优先级: 2
普通优先级: 0
高优先级: 3
普通优先级: 1
高优先级: 4
普通优先级: 2
高优先级: 5
高优先级: 6
高优先级: 7
高优先级: 8
高优先级: 9
普通优先级: 3
普通优先级: 4
普通优先级: 5
普通优先级: 6

普通优先级: 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
这种东西还用酿吗
查出来告他诈骗
不然会很麻烦的