期刊发表网电话

全国热线
022-83699069

java多线程编程中的数据安全性能研究

作者: 发布时间:2020-01-17 11:42:32 阅读: 46 次

     要:我们知道,JAVA能够顺利进行多程序同时的运行,而这个作用主要是得益于它的语言涵盖了多线程机制,所以这就便于程式员能够开发出对多线程进行支持的程序,进而使得运行程序的效率得到了较大的提升。下文主要对JAVA 的多线编程进行研究  

关键词:JAVA ;多线程 ;编程

 

1 多线程编程形式

对于线程的创作需要经历三个阶段,即线程的创作、线程工作的指定、线程的毙掉。通常在 Java 中线程的编程形式通常有两种 ,种所创建的线程类是经过继承 Thread 类实现的 ,再用该线程重载 run();另外一种是建立一个 Runnable 接口类 ,因为 Java 无法支持多继承性 ,因此如果要求类通过线程方式运行 ,并且继承其它类 ,就要采用的方法——run()来实现Runnable 接口 ,该方法就成为线程主函数。不同的程序运行方式不同所产生的结果也必然不同 ,主要由于两个原因 ,一是由于循环中有个随机暂停 ,另外一个重要的原因是由于无法保证线程的执行时间。通过时间表来安排进程的执行,由此使得和Java相联系的线程都有一个优先级,这些优先级是和其进行联系的关键。

2 设置线程的优先级

线程的执行的顺利完成需要通过调度程序的运用来进行,而调度程序的形式有两种,即协作和抢先。相比之下抢先式在资源调度方面较之协作式有更大优势 Java 恰恰支持抢先式 ,所以分配优先级能力在多线程程式中十分重要 ,线程调度的决策就是以其为参照进行 ,程式中的某些部分也会根据其重要程度而变化 ,从而保证它的优先级与其价值是相对应的。优先级的设这要注意几点 :一是确定优先级必须采用1~10 之间的整数 ;二是父线程的优先级要被子线程所继承 ;三是线程的优先级可以通过 setpriority()的调用进行改变。Java程序的执行是通过更高优先级实现的,随意在进行城市的编写的时候,需要考虑到优先级的级别,但是并不代表要剥夺他们运行的机会,较高的优先级随着它们的运行状态而进行休眠。

3 同步机制

任何一种线程在执行的时候都是独立的,但是他们却拥有着相同的代码模式。如果这些线程要协同工作 ,那么一定要注意其线程代码是不是能够重入控制 ,所以 Java 就提供了相应的同步机制 ,从而阻止多个线程的一个或者多个关键代码在任意时间执行该代码。该机制是建立在锁的概念和监视器基础上的 ,其中监视器是关键代码周围的保护 ,锁则是监视器阻止线程进入监视器的软件。其基本理念是 :如果一个线程要进入监视器所监视的关键代码 ,该线程要获取一个与之相关的锁 ;如果别的线程在使用这个锁 ,那么 Java 就会强制性的要求其在一个与锁以及监视器相关的区域进行等待 ;当锁被释放时 ,Java 就移出等待状态中的线程 ,同意其获取琐 ,并对监视器的关键代码进行相应处理。Java和锁和监视器工作的同步进行是通过monitorexit 以及 monitorenter 指令实现的,但是它们却拥有较低的额级别,所以对于线程的同步可以采用下面的方式:

3.1 synchronized 方法

synchronized()方法的声明可以通过加入一些关键字实现。在 synchronized()方法中 ,类成员变量访问由 synchronized()方法控制 ,每个类实例都会对应一个琐 ,如果 synchronized()方法要执行就要获取相应的锁 ,否则会阻塞所属的线程。若是这个方法的状态是运行的话就会对一个锁进行独占,对锁的释放需要其终止才行。

3.2 synchronized

种方法的声明效率会受到其代码数量的影响。因此我们可以用 synchronized 块来解决该问题。synchronized 块中要获取 SynObject 对应的锁才可以执行 ,因为可以对任何代码块并且上锁的对象可以任意指定 。所以这个方法的灵活性比较高。

4 线程阻塞和死锁

资源的共享是编制多线程时需要重视的问题。虽然上述 JAVA 同步机制可以控制线程代码重入 ,但很多时候多个线程在各自的执行过程中 ,会访问诸如存储处理等同一处资源 ,因为线程不同 ,其所执行的时机也不一致 ,所以为了防止不同线程在访问共享资源时修改其内容 ,JAVA 就提供了相应的阻塞机制来解决该问题 。主要有以下及几种支持阻塞的方法 :

1)线程阻塞的方法

首先推荐的方法就是sleep(),为了能够使得线程的阻塞状态不受任何CPU 时间的控制,它的参数一般是指毫秒为单位的时间段。当指定时间过去后 ,线程即可进入执行状态 ;第二种是 resume()以及 suspend():要将这两种方法进行配合使用 ,suspend()会使线程保持阻塞状态 ,并且无法自动恢复 ,只有当调用 resume()时 ,才可以重新使线程进入执行状态 ;第三种是 yield():该方法使得线程放弃当前得到的 CPU 时间 ,但是无法阻塞线程 ,因此线程仍然处于执行状态中 ,并且可以随时再取得 CPU 时间。当调用 yield()时其效果等价于调度程序 ,认为该线程已经执行了足够的时间 ,转达向另一个线程 ;最后一种方法是通过结合使用notify()以及 wait()。

2)注意事项

有一组方法是任何对象都拥有的,它所占用的锁的释放需要在其阻塞进行。notify()和 wait)属于 Thread 类 ,而 resume()和 suspend()则属于 Object 类 ,由于任何对象都有锁 ,所以调用任何对象 wait()法都会导致线程阻塞 ,且对象的锁也被释放 ;若是对notify()法进行运用的话,只会造成相对的wait()法阻塞线程中对于阻塞的解除将会任意选择一个进行。

参考文献:

[1] 侯彰弟. Java网络数据库编程及其应用[J]. 中国新通信 , 2012,(09)

[2] 夏宇. 基于JAVA常见异常处理研究[J]. 计算机光盘软件与应用 , 2012,(08)

[3] 潘国荣. Java中基于自定义表格模型的表格实现方法研究[J]. 电脑知识与技术 , 2012,(15)

[4] 顾海林. 浅议单片机未来的发展前景[J]. 科技创新与应用 , 2012,(15)

[5] 孙文华. 一种基于Java编程的脏字过滤器的设计[J]. 微型机与应用 , 2012,(09)