javaÖÐsynchronized¹Ø¼ü×ֵIJâÊÔ
×î½üÓÉÓÚ¸÷ÖÖÔÒòÆÈʹ×Ô¼ºÐèÒªÏêϸÁ˽âjavaµÄ»ù±¾ÖªÊ¶£¬Ö®Ç°ÔÚѧУѧjava¶àÏ̵߳Äʱºò£¬ºÜ¶àºÜÖØÒªµÄ֪ʶµã¶¼ÊÇÒ»´ø¶ø¹ý¡£
ÎÒÃÇÀ´»ØÒäÒ»ÏÂjavaÖÐsynchronized¹Ø¼ü×ÖµÄÓÃ;£¨Ò»ÏÂÄÚÈÝÊô¸öÈËÀí½â£¬»¶Ó¶ÁÕßÐÞÕý£¡£©£º
1£ºsynchronized ÐÞÊξ²Ì¬·½·¨Ê±ºò£¬ÔÚÈκÎʱºòjvm¶¼±£Ö¤Ö»ÓÐÒ»¸öÏ̷߳ÃÎÊ·½·¨ÄÚ²¿µÄ´úÂ룬Òò´Ë±£Ö¤ÁËÐí¶à¾²Ì¬µÄ¶ÔÏó²»±»ÒâÍâµÄÐ޸쬽â¾öÁ˶àÏß³ÌϾ²Ì¬¶ÔÏóµÄÊý¾Ý²»Í¬²½ÎÊÌâ¡£
¿´ÒÔϲâÊÔ´úÂ룺
package thread;
public class TestSynchronized extends Thread {
/**
* ²âÊÔÊä³öµÄ´ÎÊý
*/
private static int times;
/**
* ¶¨ÒåÈý¸öÏß³Ì
*/
private static Thread t1 = new TestSynchronized("t1");
private static Thread t2 = new TestSynchronized("t2");
private static Thread t3 = new TestSynchronized("t3");
/**
* ¿ªÊ¼²âÊÔʱ¼ä
*/
private static long start;
TestSynchronized(String name){
super(name);
}
/**
* @param args
*/
public static void main(String[] args) {
start = System.currentTimeMillis();
t1.start();
t2.start();
t3.start();
}
public void run(){
for(int i=0;i<50;i++){
log(getName(),i);
}
//´òÓ¡×»°·Ñʱ¼ä ÒÔ×îºó´òÓ¡µÄΪ±ê×¼
System.out.println(getName()+"ÒѾ½áÊø¡£»¨·Ñʱ¼ä£º"+(System.currentTimeMillis()-start));
}
synchronized static void log(Object id,Object msg){
times++;
msg(id," ½øÀ´ÁË¡£¡£");
msg(id,msg);
try {
Thread.sleep(100);
} catch (Exception e) {e.printStackTrace();}
msg(id," ³öÀ´ÁË¡£¡£");
}
static void msg(Object id,Object msg){
System.out.println(times+":"+id+">>"+msg);
}
}
ÆäÖÐÎÒÃÇÒ»“times” ΪҪÎÒÃÇҪͬ²½µÄÊý¾Ý£¬Ã¿´ÎlogµÄʱºòtimes½«±»×Ô¼ÓÒ»´Î£¬ÔÚÖ»ÓÐÒ»¸öÏ̷߳ÃÎʸ÷½·¨µÄÇé¿öÏ¿ÉÒÔºÜÕý³£µÄ´òÓ¡³ötimes¶ÔÓ¦µÄÊä³ö¡£µ«ÊÇÔÚ¶àÏ̵߳Ļ·¾³Ï¾ͻáºÜÈÝÒ׳öÏÖ´íλµÄÏÖÏó£¬ÒÔÉÏ´úÂëµÄ²¿·ÖÊä³ö£¨Èý¸öỊ̈߳©ÈçÏ£º
µÚ3´Îlog£¬Ị̈߳ºt2>>log start¡£¡£
µÚ3´Îlog£¬Ị̈߳ºt2>>0
µÚ3´Îlog£¬Ị̈߳ºt1>>log start¡£¡£
µÚ3´Îlog£¬Ị̈߳ºt1>>0
µÚ3´Îlog£¬Ị̈߳ºt3>&
Ïà¹ØÎĵµ£º
1¡¢Âß¼ÔËËã·û == £¬ÔÚjavaÖÐÔËËã·û == ÊÇÓÃ×÷¶Ô±ÈÁ½¸ö¶ÔÏóµÄ±êʶÊÇ·ñÒ»Ñù£¬»òÕß¶ÔÓÚ»ù±¾ÀàÐͶøÑÔÊý¾ÝÖµÊÇ·ñÏàµÈ¡£»ù±¾ÀàÐͺͶÔÏóÊý¾ÝÖ®¼äÊDz»¿ÉÒÔÓÃÖ±½ÓÒâÒåÉϵıȽϣ¬javaÖвÉÓõÄÊǽ«¶ÔÏóÀàÐͲðÏ䣬¶øÔÚgroovyÖУ¬ÓÉÓÚ×Ô¶¯×°ÏäµÄ¹¦ÄÜ£¬Ò»Çж¼ÊǶÔÏó¡£ÒªÊ¹µÃ == ±È½ÏÓÐͨÓÃÐÔµÄÒâÒ壬groovyͨ¹ýequals()À´ÖØÔØ == Ô¤Ëã·û¡ ......
LombokÊÇÒ»ÖÖJavaArchive(JAR)Îļþ£¬¿ÉÓÃÀ´Ïû³ýJava´úÂëµÄÈß³¤¡£Í¨¹ýÔÚ¿ª·¢»·¾³ÖÐʵÏÖLombok£¬¿ª·¢ÈËÔ±¿ÉÒÔ½ÚÊ¡¹¹½¨ÖîÈçhashCode()ºÍequals()ÕâÑùµÄ·½·¨ÒÔ¼°ÒÔÍùÓÃÀ´·ÖÀà¸÷ÖÖaccessorºÍmutatorµÄ´óÁ¿Ê±¼ä¡£
ÎÒÃÇ¿´ÕâÑùÒ»¸öÀý×Ó£¬Ò»¸ö±ê×¼µÄJavabean¡£Ò»¸öµäÐ͵ÄJavabeanÒ»°ã¾ßÓм¸¸öÊôÐÔ¡£Ã¿¸öÊôÐÔ¾ßÓÐÒ»¸öaccessorºÍmutat ......
Java¶ÁÈ¡µØÀíÐÅÏ¢Êý¾ÝÎļþ£¬²¢½«Æä´æÈëOracleÊý¾Ý¿â¡£
package file;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; ......
JAVAÖÐÓÃÓÚ´¦Àí×Ö·û´®µÄ“ÈýÐֵܔ
JAVAÖÐÓÃÓÚ´¦Àí×Ö·û´®³£ÓõÄÓÐÈý¸öÀࣺjava.lang.String¡¢java.lang.StringBuffer¡¢java.lang.StringBuilder£¬ÕâÈýÕߵĹ²Í¬Ö®´¦¶¼ÊÇfinalÀ࣬²»ÔÊÐí±»¼Ì³Ð£¬ÕâÖ÷ÒªÊÇ´ÓÐÔÄܺͰ²È«ÐÔÉÏ¿¼Âǵģ¬ÒòΪÕ⼸¸öÀà¶¼ÊǾ³£±»Ê¹ÓÃ×ŵģ¬ÇÒ¿¼Âǵ½·ÀÖ¹ÆäÖеIJÎÊý±»ÐÞ¸ÄÓ°Ïìµ½ÆäËüµÄÓ¦Óᣠ......
Java´´Ê¼ÈËղķ˹·¸ß˹ÁÖ(James Gosling)ÈÕǰÔÚ²©¿ÍÖгÆ,ÒѾÔÚ4ÔÂ2ÈÕ´Ó¼×¹ÇÎÄ(Oracle£©ÍËÐÝ¡£ºÜ¶àÈ˵ĵÚÒ»·´Ó¦ÊÇ£¬ËûÊÇ·ñ»áͶ±¼Î¢Èí¡¢GoogleÖ®ÀàµÄ¹«Ë¾ÄØ£¿²»¹ýGosling±íʾĿǰ»¹Ã»ÓнøÒ»²½´òËã¡£
¹ØÓÚÀëÖ°µÄ¾ßÌåÔÒò£¬¸ß˹ÁÖûÓÐ͸¶¡£Ö»ÊÇÔÚ²©¿ÍÖÐдµÀ£º“Êǵģ¬ÄÇЩ´«ÑÔ¶¼ÊÇÕæµÄ£ºÎÒÒѾÔÚÒ»ÖÜǰ£¨4 ......