眾所周知,java開(kāi)發(fā)語(yǔ)言提供了很方便的開(kāi)發(fā)平臺(tái),而且開(kāi)發(fā)出來(lái)的程序很容易在不同的平臺(tái)上面進(jìn)行移植,現(xiàn)在越來(lái)越多的人使用它開(kāi)發(fā)軟件。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的米易網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Java有了它方便的一個(gè)方面,但是他同時(shí)也帶給了開(kāi)發(fā)者一個(gè)煩惱,這就是保護(hù)的辦法不多,而且大多數(shù)不是很好用,這樣自己辛苦開(kāi)發(fā)出來(lái)的程序很容易被人復(fù)制而據(jù)為己有,一般情況下,大多數(shù)的人都是用混編器(java obfuscator)來(lái)把開(kāi)發(fā)出來(lái)的程序進(jìn)行打亂以達(dá)到?jīng)]有辦法來(lái)反編譯觀看源代碼,但是這種辦法在網(wǎng)上很容易找到相關(guān)的軟件來(lái)重新整理,那么這個(gè)混編只能控制一些本來(lái)也沒(méi)有辦法動(dòng)您的軟件的人,而對(duì)于一些掌握工具的人幾乎是透明的,還有就是利用硬件加密鎖,但大多數(shù)公司提供的硬件加密鎖只是提供了一些dll的連接或簡(jiǎn)單的api調(diào)用,只要反編譯他們,就很容易把一些api調(diào)用去掉,這樣硬件加密鎖也就不起作用了,但是現(xiàn)在到底有沒(méi)有好的辦法呢?
以色列阿拉丁公司提供的*** HL加密鎖提供的外殼加密工具中有一個(gè)叫做數(shù)據(jù)加密的功能,這個(gè)功能能更好的防止去除api的調(diào)用,各位都知道:硬件加密鎖的保護(hù)原理就是要您被加密過(guò)的軟件和加密鎖的硬件要緊緊地結(jié)合在一起,而且不容易被輕易的剔出原來(lái)的調(diào)用,這樣才能更好的保證您的軟件不被盜版,同時(shí)這種方式也很容易被程序員掌握,要對(duì)一個(gè)軟件實(shí)現(xiàn)保護(hù),只需要幾分鐘的時(shí)間就可以了,下面簡(jiǎn)單介紹一下他的原理:
運(yùn)用阿拉丁公司提供的外殼工具先把調(diào)用您的java解釋器來(lái)進(jìn)行加密,那么就是說(shuō)如果要運(yùn)用這個(gè)解釋器就需要有一把特定的加密鎖存在,然后我們?cè)龠\(yùn)用它提供的外殼加密工具中的內(nèi)容加密,把您寫(xiě)好的java程序當(dāng)作一個(gè)文件來(lái)處理而對(duì)他進(jìn)行加密,這個(gè)加密是采用的AES128位的算法的,這樣這個(gè)加密過(guò)的數(shù)據(jù)文件??您的軟件就只能被您保護(hù)過(guò)的java解釋器來(lái)進(jìn)行解釋?zhuān)窃跊](méi)有加密鎖的情況下就不能夠運(yùn)行您的軟件,從而達(dá)到真正保護(hù)您的軟件的目的。
lock比synchronized比較如下:
1) 支持公平鎖,某些場(chǎng)景下需要獲得鎖的時(shí)間與申請(qǐng)鎖的時(shí)間相一致,但是synchronized做不到
2) 支持中斷處理,就是說(shuō)那些持有鎖的線程一直不釋放,正在等待的線程可以放棄等待。如果不支持中斷處理,那么線程可能一直無(wú)限制的等待下去,就算那些正在占用資源的線程死鎖了,正在等待的那些資源還是會(huì)繼續(xù)等待,但是ReentrantLock可以選擇放棄等待
3) condition和lock配合使用,以獲得最大的性能
JAVA中鎖使用的幾點(diǎn)建議:
1.如果沒(méi)有特殊的需求,建議使用synchronized,因?yàn)椴僮骱?jiǎn)單,便捷,不需要額外進(jìn)行鎖的釋放。鑒于JDK1.8中的ConcurrentHashMap也使用了CAS+synchronized的方式替換了老版本中使用分段鎖(ReentrantLock)的方式,可以得知,JVM中對(duì)synchronized的性能做了比較好的優(yōu)化。
2.如果代碼中有特殊的需求,建議使用Lock。例如并發(fā)量比較高,且有些操作比較耗時(shí),則可以使用支持中斷的所獲取方式;如果對(duì)于鎖的獲取,講究先來(lái)后到的順序則可以使用公平鎖;另外對(duì)于多個(gè)變量的鎖保護(hù)可以通過(guò)lock中提供的condition對(duì)象來(lái)和lock配合使用,獲取最大的性能。
javascript的鎖屏代碼:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""
html xmlns=""
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312" /
titleJavaScript鎖屏/title
style type="text/css"
body {
font-size:12px
}
#Screen {
position:absolute;
z-index: 9998;
top: 0px;
left: 0px;
background: #000000;
display: none;
filter: alpha(Opacity=50);
}
#Message {
position: absolute;
z-index: 9999;
top: 180px;
left: 340px;
display: none;
}
/style
script language="javascript"
// 獲取寬度
function getWidth()
{
var strWidth,clientWidth,bodyWidth;
clientWidth = document.documentElement.clientWidth;
bodyWidth = document.body.clientWidth;
if(bodyWidth clientWidth){
strWidth = bodyWidth + 20;
} else {
strWidth = clientWidth;
}
return strWidth;
}
//獲取高度
function getHeight()
{
var strHeight,clientHeight,bodyHeight;
clientHeight = document.documentElement.clientHeight;
bodyHeight = document.body.clientHeight;
if(bodyHeight clientHeight){
strHeight = bodyHeight + 30;
} else {
strHeight = clientHeight;
}
return strHeight;
}
// 鎖屏
function showScreen()
{
var Element = document.getElementById('Message');
var Elements = document.getElementById('Screen');
Elements.style.width = getWidth();
Elements.style.height = getHeight();
Element.style.display = 'block';
Elements.style.display = 'block';
}
//解屏
function hideScreen()
{
var Element = document.getElementById('Message');
var Elements = document.getElementById('Screen');
Element.style.display = 'none';
Elements.style.display = 'none';
}
/script
/head
body
div id="Message"
table width="300" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor="#CCCCCC"
tr
td height="28" align="right" bgcolor="#F2F2F2"span style="cursor:pointer;" onclick="javascript:hideScreen();"關(guān)閉/span /td
/tr
tr
td height="150" align="center" bgcolor="#F2F2F2"已經(jīng)鎖屏 ..... /td
/tr
/table
/div
div id="Screen"/div
span style="cursor:pointer;" onclick="javascript:showScreen();"鎖屏/span
/body
/html
如何使用java程序?qū)崿F(xiàn)windows鎖屏:
//本文調(diào)用一個(gè)通過(guò)調(diào)用操作系統(tǒng)的一個(gè)命令來(lái)實(shí)現(xiàn),在xp上測(cè)試通過(guò)
public?class?LockWindows?{
public?static?void?main(String?[]?args)?throws?Exception?{
Runtime.getRuntime().exec("RunDll32.exe?user32.dll,LockWorkStation");
}
}