java代码死锁伪代码 java死锁的解决方法( 三 )


6. 伪代码的写法
最低0.27元开通文库会员,查看完整内容 原发布者:wangwenjxnu 伪代码伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法 。
每一行(或几行)表示一个基本操作 。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,便于向程序过渡 。
伪代码的7个主要部分:(1)算法名称(2)指令序列(3)输入/输出(4)分支选择(5)赋值(6)循环(7)算法结束1.算法名称两种表示算法的伪代码:过程(Procedure)函数(Function)过程和函数的区别是:过程是执行一系列的操作,不需要返回操作的结果,无返回数据;函数是执行一系列的操作后,要将操作的结果返回,有返回数据 。算法伪代码的书写规则:Procedure([])Function([])如:ProcedureHanoi_Tower()FunctionFac(x)表示名为Fac的一个函数 。
FunctionProg(n)表示名为Prog的一个函数 。2.指令序列指令序列是算法的主体 。
指令序列的书写规则:用Begin作为开始、用End作为结束;用“{”作为开始、用“/}”作为结束 。例如:Begin指令序列;End或者:{指令序列;/}3.输出/输出输入:Input输出:Output或Return4.分支选择两种分支:IfThen{指令序列/}IfThen{ 。
JAVA怎么实现输入密码错误三次就会被锁定,需要管理员解锁的代码?用While和一个计数变量,以下是伪代码
定义计数变量并归零
定义状态变量并归零
while(计数变量3且状态变量为真)
{
输入密码
if(密码正确)
{
状态变量设定为真
}
else
{
计数变量+1
密码框清空
}
}
if(状态变量不为真)/说明前面的循环结束是因为输错了三次
{
提示:请管理员解锁
【密码输入过程与上方用while循环类似】
}
else
{
(剩余操作)
}
java 死锁死锁
死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放 。由于线程被无限期地阻塞,因此程序不可能正常终止 。
导致死锁的根源在于不适当地运用“synchronized”关键词来管理线程对特定对象的访问 。“synchronized”关键词的作用是 , 确保在某个时刻只有一个线程被允许执行特定的代码块,因此,被允许执行的线程首先必须拥有对变量或对象的排他性的访问权 。当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁 。
由于这个原因 , 在使用“synchronized”关键词时,很容易出现两个线程互相等待对方做出某个动作的情形 。代码一是一个导致死锁的简单例子 。
//代码一
class Deadlocker {
int field_1;
private Object lock_1 = new int[1];
int field_2;
private Object lock_2 = new int[1];
public void method1(int value) {
“synchronized” (lock_1) {
“synchronized” (lock_2) {
field_1 = 0; field_2 = 0;
}
}
}
public void method2(int value) {
“synchronized” (lock_2) {
“synchronized” (lock_1) {
field_1 = 0; field_2 = 0;
}
}
}
}
参考代码一 , 考虑下面的过程:
◆ 一个线程(ThreadA)调用method1() 。
◆ ThreadA在lock_1上同步,但允许被抢先执行 。
◆ 另一个线程(ThreadB)开始执行 。
◆ ThreadB调用method2() 。
◆ ThreadB获得lock_2,继续执行,企图获得lock_1 。但ThreadB不能获得lock_1,因为ThreadA占有lock_1 。
◆ 现在,ThreadB阻塞,因为它在等待ThreadA释放lock_1 。
◆ 现在轮到ThreadA继续执行 。ThreadA试图获得lock_2,但不能成功 , 因为lock_2已经被ThreadB占有了 。

推荐阅读