真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java不能鎖定代碼 java中的死鎖

【轉(zhuǎn)】如何保護(hù)Java代碼

以下從技術(shù)角度就常見的保護(hù)措施 和常用工具來看看如何有效保護(hù)java代碼:1. 將java包裝成exe 特點:將jar包裝成可執(zhí)行文件,便于使用,但對java程序沒有任何保護(hù)。不要以為生成了exe就和普通可執(zhí)行文件效果一樣了。這些包裝成exe的程序運行時都會將jar文件釋放到臨時目錄,很容易獲取。常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe運行時臨時目錄在exe所在目錄中或是用戶臨時目錄 中;exe4j生成的exe運行時臨時目錄在用戶臨時目錄中;NativeJ生成的exe直接用winrar打開,然后用zip格式修復(fù)成一個jar文件,就得到了原文件。如果只是為了使用和發(fā)布方便,不需要保護(hù)java代碼,使用這些工具是很好的選擇。2. java混淆器特點:使用一種或多種處理方式將class文件、java源代碼進(jìn)行混淆處理后生成新的class,使混淆后的代碼不易被反編譯,而反編譯后的代碼難以閱 讀和理解。這類混淆器工具很多,而且也很有成效。缺點:雖然混淆的代碼反編譯后不易讀懂,但對于有經(jīng)驗的人或是多花些時間,還是能找到或計算出你代碼中隱藏的敏感內(nèi)容,而且在很多應(yīng)用中不是全部代碼都能混淆的,往往一些關(guān)鍵的庫、類名、方法名、變量名等因使用要求的限制反而還不能混淆。3. 隔離java程序到服務(wù)端特點:把java程序放到服務(wù)端,讓用戶不能訪問到class文件和相關(guān)配套文件,客戶端只通過接口訪問。這種方式在客戶/服務(wù)模式的應(yīng)用中能較好地保護(hù)java代碼。缺點是:必須是客戶/服務(wù)模式,這種特點限制了此種方式的使用范圍;客戶端因為邏輯的暴露始終是較為薄弱的環(huán)節(jié),所以訪問接口時一般都需要安全性認(rèn)證。4. java加密保護(hù)特點:自定義ClassLoader,將class文件和相關(guān)文件加密,運行時由此ClassLoader解密相關(guān)文件并裝載類,要起到保護(hù)作用必須自定 義本地代碼執(zhí)行器將自定義ClassLoader和加密解密的相關(guān)類和配套文件也保護(hù)起來。此種方式能很有效地保護(hù)java代碼。缺點:可以通過替換JRE包中與類裝載相關(guān)的java類或虛擬機動態(tài)庫截獲java字節(jié)碼。 jar2exe屬于這類工具。5. 提前編譯技術(shù)(AOT) 特點:將java代碼靜態(tài)編譯成本地機器碼,脫離通用JRE。此種方式能夠非常有效地保護(hù)java代碼,且程序啟動比通用JVM快一點。具有代表性的是GNU的gcj,可以做到對java代碼完全提前編譯,但gcj存在諸多局限性,如:對JRE 5不能完整支持、不支持JRE 6及以后的版本。由于java平臺的復(fù)雜性,做到能及時支持最新java版本和JRE的完全提前編譯是非常困難的,所以這類工具往往采取靈活方式,該用即時編譯的地方還是 要用,成為提前編譯和即時編譯的混合體。缺點:由于與通用JRE的差異和java運用中的復(fù)雜性,并非java程序中的所有jar都能得到完全的保護(hù);只能使用此種工具提供的一個運行環(huán)境,如果工具更新滯后或你需要特定版本的JRE,有可能得不到此種工具的支持。 Excelsior JET屬于這類工具。6. 使用jni方式保護(hù)特點:將敏感的方法和數(shù)據(jù)通過jni方式處理。此種方式和“隔離java程序到服務(wù)端”有些類似,可以看作把需要保護(hù)的代碼和數(shù)據(jù)“隔離”到動態(tài)庫中,不同的是可以在單機程序中運用。缺點和上述“隔離java程序到服務(wù)端”類似。7. 不脫離JRE的綜合方式保護(hù)特點:非提前編譯,不脫離JRE,采用多種軟保護(hù)方式,從多方面防止java程序被竊取。此種方式由于采取了多種保護(hù)措施,比如自定義執(zhí)行器和裝載器、加密、JNI、安全性檢測、生成可執(zhí)行文件等等,使保護(hù)力度大大增強,同樣能夠非常有效地保護(hù)java代碼。缺點:由于jar文件存在方式的改變和java運用中的復(fù)雜性,并非java程序中的所有jar都能得到完全的保護(hù);很有可能并不支持所有的JRE版本。 JXMaker屬于此類工具。8. 用加密鎖硬件保護(hù)特點:使用與硬件相關(guān)的專用程序?qū)ava虛擬機啟動程序加殼,將虛擬機配套文件和java程序加密,啟動的是加殼程序,由加殼程序建立一個與硬件相關(guān)的 受保護(hù)的運行環(huán)境,為了加強安全性可以和加密鎖內(nèi)植入的程序互動。此種方式與以上“不脫離JRE的綜合方式保護(hù)”相似,只是使用了專用硬件設(shè)備,也能很好地保護(hù)java代碼。缺點:有人認(rèn)為加密鎖用戶使用上不太方便,且每個安裝需要附帶一個。從以上描述中我們可以看出:1. 各種保護(hù)方式都有其優(yōu)缺點,應(yīng)根據(jù)實際選用2. 要更好地保護(hù)java代碼應(yīng)該使用綜合的保護(hù)措施3. 單機環(huán)境中要真正有效保護(hù)java代碼,必須要有本地代碼程序配合當(dāng)然,安全都是相對的,一方面看你的保護(hù)措施和使用的工具能達(dá)到的程度,一方面看黑客的意愿和能力,不能只從技術(shù)上保護(hù)知識產(chǎn)權(quán)。總之,在java 代碼保護(hù)方面可以采取各種可能的方式,不可拘泥于那些條條框框。

創(chuàng)新互聯(lián)建站總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護(hù)、公眾號搭建、小程序定制開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!

java中文件加鎖機制是怎么實現(xiàn)的。

Java中文件加鎖機制如下:

在對文件操作過程中,有時候需要對文件進(jìn)行加鎖操作,防止其他線程訪問該文件。對文件的加鎖方法有兩種:

第一種方法:使用RandomAccessFile類操作文件。

在java.io.RandomAccessFile類的open方法,提供了參數(shù)實現(xiàn)獨占的方式打開文件:

RandomAccessFile raf = new RandomAccessFile(file, "rws");

其中的“rws”參數(shù),rw代表讀取和寫入,s代表了同步方式,也就是同步鎖。這種方式打開的文件,就是獨占方式的。

第二種方法:使用sun.nio.FileChannel對文件進(jìn)行加鎖。

代碼:

RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");

FileChannel fc = raf.getChannel();

FileLock fl = fc.tryLock();

if(fl.isValid())

System.out.println("You have got the file lock.");

以上是通過RandomAccessFile來獲得文件鎖的,方法如下:

代碼:

FileOutputStream fos = new FileOutputStream("file.txt");

FileChannel fc = fos.getChannel(); //獲取FileChannel對象

FileLock fl = fc.tryLock(); //or fc.lock();

if(null != fl)

System.out.println("You have got file lock.");

//TODO write content to file

//TODO write end, should release this lock

fl.release(); //釋放文件鎖

fos.close; //關(guān)閉文件寫操作

如果在讀文件操作的時候,對文件進(jìn)行加鎖,操作過程如下:

FileChannel也可以從FileInputStream中直接獲得,但是這種直接獲得FileChannel的對象直接去操作FileLock會報異常NonWritableChannelException,需要自己去實現(xiàn)getChannel方法,代碼如下:

private static FileChannel getChannel(FileInputStream fin, FileDescriptor fd) {

FileChannel channel = null;

synchronized(fin){

channel = FileChannelImpl.open(fd, true, true, fin);

return channel;

}

}

其實,看FileInputStream時,發(fā)現(xiàn)getChannel方法與我們寫的代碼只有一個地方不同,即open方法的第三個參數(shù)不同,如果設(shè)置為false,就不能鎖住文件了。缺省的getChannel方法,就是false,因此,不能鎖住文件。

java線程同步問題,用了synchronized關(guān)鍵字后不能實現(xiàn)鎖定

你要把你的Timer t=new Timer()設(shè)置為static的,不然下面代碼中你創(chuàng)建兩個TestSync對象,也就有了兩個t,然后你的兩個線程分別調(diào)用不同的t,不能實現(xiàn)鎖定,下面是正確代碼

---------------------------------------------

public class TestSync extends Thread {

/**

* @param args

*/

static Timer t = new Timer();

public static void main(String[] args) {

TestSync t1 = new TestSync();

TestSync t2 = new TestSync();

t1.setName("t1");

t2.setName("t2");

t1.start();

t2.start();

}

public void run() {

t.add(Thread.currentThread().getName());

}

}

class Timer {

private static int num = 0;

public synchronized void add(String name) {

num++;

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

}

System.out.println(name + "你是第" + num + "個訪問Timer的線程");

}

}

java 能否鎖定變量的值,使之無論如何都不能被其他程序篡改,等到需要改變的時候,就將之解鎖?

如果用static final修飾的變量就是一個常量了,是不能被修改的

我覺得可以這樣

public class People2{

private int age;

private boolean flag=false;;//定義一個標(biāo)志,用來判斷age能否被修改,默認(rèn)是false,即不能

public People2(){

}

public People2(int age){

this.age=age;

}

public boolean isFlag() {

return flag;

}

public void setFlag(boolean flag) {

this.flag = flag;

}

public int getAge() {

return age;

}

public void setAge(int age) {

if(flag==true){

this.age = age;

}else{

System.out.println("age不能被修改");

}

}

public static void main(String[] args) {

People2 p1 =new People2(10);

System.out.println("p1的初始年齡:"+p1.age);

p1.setAge(20);

System.out.println("p1的修改年齡"+p1.age);

People2 p2 =new People2(10);

System.out.println("p2的初始年齡:"+p2.age);

p2.setFlag(true);

p2.setAge(80);

System.out.println("p2的修改年齡"+p2.age);

}

};

java里的Myeclipse 怎么鎖定代碼,即無法修改

你引用的應(yīng)該是帶源碼的jar包,

想解鎖就用winrar解壓jar包,把解壓后的代碼復(fù)制到你的src目錄下才能改.

打jar包鎖定代碼的本意是避免代碼被改得不能用,你寫的代碼沒必要鎖定,非要鎖定的話自己打jar包,不過這樣你自己也改不了了

java中 請問我應(yīng)該如何如何鎖這段代碼才符合要求

public Object getObject(String key,Object o) {

synchronized (map) {

if(map.get(key)==null) {

map.put(key,o)

}else {

return map.get(key);

}}// 格式?jīng)]法弄,自己弄一下

}

// demol0326 的回答意思使用MyTest的實例來加鎖,但是map是static的,無法鎖住

// MyTest的多個實例在多個線程中的請求

//禾木雙子 :如果A線程在getObject方法的第二行停止,此時B線程進(jìn)入getObject后執(zhí)行部分代碼, 此時B線程停止,A線程啟動,他不會執(zhí)行'多線程處理', 仍然有線程線程安全問題,(想像一下更多的線程進(jìn)入該方法的情況,num甚至?xí)玫截?fù)值)


文章標(biāo)題:java不能鎖定代碼 java中的死鎖
標(biāo)題鏈接:http://weahome.cn/article/hhjijj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部