Java多线程访问控制管理分析

Java多线程访问控制管理分析摘要:本文分析并描述了Java多线程访问控制的基本方法和多线程同步访问的控制方法,以及使用优先级解决死锁问题的方法,并且用简单语句作说明。关键词:Java;多线程;同步控制:TP3121Java多线程的基本控制在Java中,一个线程从创建到死亡称为线程的一个生命周期,它的生命周期有多个不同状态,一般为:Enabled、Running、Sleeping、Joining、Waiting、Locking。对于线程的这些状态,Java在Thread类中定义了一些方法可以在程序中手动控制。要结束一个线程的运行,可以使用stop()方法。但是stop()方法并不是非常安全的,它会强制中止一个线程的运行,但是会释放这个线程锁住的所有对象,这些对象被解锁后就可能被其他的线程直接访问,导致错误的结果。因此,要中止一个线程,最好是设置一个标志位,在run()方法中根据这个标记来判断是否继续保持状态。要中止线程的时候,可以使用setRunFlag()方法。在暂停和恢复线程执行时也会出现同样的问题。可以使用Thread类中supspend()和resume()方法來暂停和恢复,但不建议使用,它们容易造成线程的死锁。解决的方法也是使用一定的标志变量。使用setsuspendFlag(true)可以暂停线程的执行,暂停时间的指定是通过sleep()方法来实现,暂停结束就回到等待队列,不是恢复执行状态。所以sleep()方法不能精确控制线程计划工作的时间尺度。下面用模拟一个龟兔接力跑的实例来演示Java多线程的sleep()方法的控制。模拟的接力跑中有一只乌龟和一只兔子。当兔子跑完400米将接力棒交给乌龟,乌龟跑完400米后结束。部分代码如下:2Java多线程的同步控制多线程程序中,多个线程可以共享相同资源,这可能导致冲突。Java使用同步机制来解决这个问题。这个同步机制使用synchronized关键字,它主要用于多线程共享数据的同步,使用加锁的机制,控制变量或代码块在某个时间段只能被一个线程访问。Java中synchronized既可作为方法的修饰符,锁住方法,也可在方法内部锁住部分语句。Synchronized方法和synchronized代码块在使用时是有区别的。将访问共享数据的方法加上synchronized,例如把synchronized当作方法修饰符:Publicsynchronizedvoidm1(){……}这就是同步方法。当某个线程调用这个同步方法时,会开始执行直到完毕为止,其它想要调用这个方法的线程会进入阻塞状态,一直到这个方法获得释放为止。使用synchronized来修饰一个比较大的方法时,也会锁住其它一些不需要锁住的数据,导致程序效率下降。Synchronized块则是把方法内的某段代码使用synchronized来修饰,可以减少同步范围。例如:Publicvoidm1(){……Synchronized(so){……}}使用synchronized修饰时,就代表着同步机制启动,某个时刻只能某个线程访问数据和资源,阻止其它线程访问,这种状态即使出现阻塞和死锁现象也不会解除。3Java多线程的死锁问题为了控制资源的访问冲突,需要使用synchronized对访问资源进行加锁,但加锁会带来一个潜在的危险:死锁。如果两个或两个以上的线程在等待两个或两个以上的锁被释放,但实际上这些锁根本就不会被解锁,那么这些线程就会进入无限等待的状态,称之为死锁。线程等待解锁的这种状态有时也被称作堵塞。死锁例子部分代码如下:4Java多线程的优先级在多线程编程中要预防死锁的发生,不然死锁后会导致浪费大量时间和资源。防止死锁的方法很多,最重要的就是防止循环等待的发生。可以使用设置线程的优先级来解决这一问题。同一时刻会有很多在排队等待资源的线程,它们各自的重要性是不同的。可以赋予每个线程不同的优先级,让任务更急的线程获得更高的优先级,更快的进入执行状态。Java中提供了10个等级的线程优先级,最低为1,最高为10,默认优先级为5。对于一个新创建的线程,如果没有指定优先级,它的优先级将和它的父线程优先级一致。使用setPriority()方法可以为线程指定优先级。例如:intnewPrio=Thread.currentThread().getPriority()+1;Thread.currentThread().setPriority(newPrio);5结束语Java多线程编程可以合理的调用多项任务,功能非常强大。但是多线程共享数据或资源时会导致执...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?