java多线程效率问题 java中怎么既能高并发效率又能线程安全

java \u591a\u7ebf\u7a0b\u95ee\u9898 \u771f\u7684\u63d0\u9ad8\u4e86\u6548\u7387\u5417\uff1f

\u4f60\u94bb\u4e86\u725b\u89d2\u5c16\u4e86\u3002\u4e0d\u8981\u4ececpu\u8017\u65f6\u4e0a\u770b\uff0c\u5e76\u884c\u4e00\u822c\u662f\u4e3a\u4e86\u4efb\u52a1\u5904\u7406\u3002\u5e76\u53d1\u662f\u4e3a\u4e86\u8d44\u6e90\u5171\u4eab\u548c\u8d44\u6e90\u7684\u5145\u5206\u5229\u7528\u3002\u4e8c\u8005\u53ef\u6bd4\u6027\u4e0d\u5927\u3002
\u4f60\u6240\u8bf4\u7684cpu\u4e00\u822c\u662f\u6307\uff0c\u5206\u65f6\u7cfb\u7edf\u4e2d\u7684cpu\uff0c\u6bd4\u5982linux\uff0c\u5176\u4e2d\u4e00\u4e2a\u7528\u6237A\u7684\u4e00\u4e2a\u7ebf\u7a0b\u898130\u4e2a\u5c0f\u65f6\u5b8c\u6210\uff0c\u53e6\u5916\u4e00\u4e2a\u7528\u6237B\u7684\u7ebf\u7a0b\u9700\u89811000\u4e2a\u5c0f\u65f6\u3002\u800c\u4e14\u5176\u4e2d\u9700\u8981\u7528\u6237\u4e0d\u65ad\u54cd\u5e94\uff0c\u5982\u679c\u6ca1\u6709\u5e76\u53d1\uff0cB\u7528\u6237\u5148\u5f00\u59cb\uff0cA\u7528\u6237\u9700\u8981\u7b49\u5f851030\u5c0f\u65f6\u3002\u5982\u679c\u4f7f\u7528\u5e76\u53d1\uff0cA\u7528\u6237\u53ef\u80fd\u56db\u4e94\u5341\u4e2a\u5c0f\u65f6\u5c31\u641e\u5b9a\u4e86\u3002\u5982\u679cA\u548cB\u90fd\u6bd4\u8f83\u6709money\uff0c\u4e00\u4eba\u4e70\u4e00\u53f0\uff0c\u6ca1\u6709\u8fd9\u4e2a\u95ee\u9898\u7684\u3002\u8fd9\u5c31\u662f\u5e76\u884c\u3002\u8d44\u6e90\u5145\u8db3\u600e\u4e48\u7740\u90fd\u884c\uff0c\u8d44\u6e90\u4e0d\u8db3\u53ea\u80fd\u627e\u6298\u4e2d\u65b9\u6848\u4e86\u3002
\u5982\u679c\u4f60\u89c9\u5f97\u8fd9\u662f\u8fdb\u7a0b\u7684\u6982\u5ff5\uff0cjava\u91cc\u4e00\u6837\u7684\u3002\u4f60\u505a\u8fc7web\u5f00\u53d1\u5427\u3002\u4f60\u80af\u5b9a\u4e0d\u60f3\u6bcf\u4e2a\u8bf7\u6c42\u90fd\u5206\u4e00\u4e2a\u670d\u52a1\u5668\u5427\u3002\u5f00\u53d1\u4e00\u4e2a\u7f51\u9875\uff0c\u4e00\u53f0\u7535\u8111\u540c\u65f6\u6709\u4e0a\u5343\u4e2a\u4eba\u8bbf\u95ee\u4f60\u7684tomcat\uff0c\u4e00\u822c\u4e0d\u4f1a\u6709\u95ee\u9898\u3002\u6d4f\u89c8\u4e5f\u987a\u7545\u3002\u8fd9\u5c31\u662f\u5e76\u53d1\u7684\u4f5c\u7528\u3002\u8fd9\u79cd\u60c5\u51b5\u5982\u679c\u4f7f\u7528\u5355\u7ebf\u7a0b\u3002\u4e00\u5343\u4e2a\u4eba\u6709999\u4e2a\u4eba\u7b49\u7740\u770b\u4f60\u7684\u7f51\u9875\uff0c\u800c\u7b2c\u4e00\u4e2a\u4eba\u64cd\u4f5c\u7684\u65f6\u5019cpu\u5927\u90e8\u5206\u65f6\u95f4\u662f\u7a7a\u95f2\u7684\u3002\u600e\u4e48\u5229\u7528\u8d77\u6765\u5c31\u6210\u4e86\u4e2a\u95ee\u9898\u3002\u8fd9\u4e5f\u53eb\u6548\u7387\u3002
\u5982\u679c\u786e\u5b9e\u5fc5\u987b\u8981\u8003\u8651\u95ee\u9898\u5904\u7406\u7684\u6548\u7387\u95ee\u9898\u3002\u4f60\u8bbf\u95ee\u6570\u636e\u5e93\u7684\u65f6\u5019\u7528\u8fc7\u7ebf\u7a0b\u6c60\u5417\uff1f\u662f\u4e0d\u662f\u80fd\u7f29\u77ed\u8bbf\u95ee\u6570\u636e\u5e93\u6240\u8017\u8d39\u7684\u65f6\u95f4\u3002\u6240\u4ee5\u6548\u7387\u9ad8\u4e0d\u9ad8\u4e0d\u80fd\u53ea\u770bcpu\u7528\u4e86\u591a\u5c11\u65f6\u95f4\u3002\u4f60\u53ef\u4ee5\u518d\u8003\u8651\u8003\u8651\uff0c\u4e0d\u7528\u591a\u7ebf\u7a0b\uff0c\u4f60\u600e\u4e48\u8bbe\u8ba1\u4e00\u4e2a\u5355\u7ebf\u7a0b\u7a0b\u5e8f\uff0c\u540c\u65f6\u76d1\u542c\u952e\u76d8\u548c\u9ea6\u514b\u98ce\u7684\u4fe1\u606f\u5f55\u5165\uff1f
\u5176\u5b9e\u8ba1\u7b97\u673a\u5e95\u5c42\u662f\u6709\u5929\u7136\u7684\u5f02\u6b65\u7279\u6027\u7684\u3002\u8fd9\u4e2a\u4e1c\u897f\u5c31\u662f\u4e2d\u65ad\u3002\u6709\u4e9b\u8017\u65f6\u7684io\u64cd\u4f5c\uff0c\u4ec0\u4e48\u65f6\u5019\u5904\u7406\u5b8c\u662f\u53ef\u4ee5\u4e0d\u7528\u7ba1\u7684\u3002\u5269\u4e0b\u7684\u65e0\u5173\u7ebf\u7a0b\u5c31\u53ef\u4ee5\u81ea\u7531\u81ea\u5728\u7684\u8fdb\u884c\u4e86\u3002\u8fd9\u6837\u6548\u7387\u662f\u4e0d\u662f\u4e5f\u9ad8\u4e86\u3002
\u5355cpu\u4e00\u822c\u4e5f\u662f\u591a\u6838\u7684\u3002

\u603b\u7684\u7ed3\u8bba\uff1ajava\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u5373\u5bf9\u4efb\u4f55\u65b9\u6cd5\uff08\u5305\u62ec\u9759\u6001\u65b9\u6cd5\uff09\u90fd\u53ef\u4ee5\u4e0d\u8003\u8651\u7ebf\u7a0b\u51b2\u7a81\uff0c\u4f46\u6709\u4e00\u4e2a\u524d\u63d0\uff0c\u5c31\u662f\u4e0d\u80fd\u5b58\u5728\u5168\u5c40\u53d8\u91cf\u3002\u5982\u679c\u5b58\u5728\u5168\u5c40\u53d8\u91cf\uff0c\u5219\u9700\u8981\u4f7f\u7528\u540c\u6b65\u673a\u5236\u3002

\u5982\u4e0b\u901a\u8fc7\u4e00\u7ec4\u5bf9\u6bd4\u4f8b\u5b50\u4ece\u5934\u8bb2\u89e3\uff1a
\u5728\u591a\u7ebf\u7a0b\u4e2d\u4f7f\u7528\u9759\u6001\u65b9\u6cd5\u4f1a\u53d1\u751f\u4ec0\u4e48\u4e8b\uff1f\u4e5f\u5c31\u662f\u8bf4\u591a\u7ebf\u7a0b\u8bbf\u95ee\u540c\u4e00\u4e2a\u7c7b\u7684static\u9759\u6001\u65b9\u6cd5\u4f1a\u53d1\u751f\u4ec0\u4e48\u4e8b\uff1f\u662f\u5426\u4f1a\u53d1\u751f\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\uff1f
public class Test {
public static void operation(){
// ... do something
}
}
\u4e8b\u5b9e\u8bc1\u660e\u53ea\u8981\u5728\u9759\u6001\u51fd\u6570\u4e2d\u6ca1\u6709\u5904\u7406\u591a\u7ebf\u7a0b\u5171\u4eab\u6570\u636e\uff0c\u5c31\u4e0d\u5b58\u5728\u7740\u591a\u7ebf\u7a0b\u8bbf\u95ee\u540c\u4e00\u4e2a\u9759\u6001\u65b9\u6cd5\u4f1a\u51fa\u73b0\u8d44\u6e90\u51b2\u7a81\u7684\u95ee\u9898\u3002\u4e0b\u9762\u770b\u4e00\u4e2a\u4f8b\u5b50\uff1a
public class StaticThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
StaticAction.print();
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(new StaticThread()).start();
}
}
}
public class StaticAction {
public static int i = 0;
public static void print() {
int sum = 0;
for (int i = 0; i < 10; i++) {
System.out.print("step " + i + " is running.");
sum += i;
}
if (sum != 45) {
System.out.println("Thread error!");
System.exit(0);
}
System.out.println("sum is " + sum);

线程之间的上下文切换也是需要cpu时间的。最主要的是,一般来说在多核cpu下,多线程的效率是比单线程的高,但是这个高是建立在利用了空闲的cpu,因为一般来说cpu使用率都不很高,你这个程序的话,cpu使用已经很高了,多线程并不能让你的效率变高,反而因为上下文切换导致变低,关键在于理解多线程一般为什么会使效率变高。

楼上的回答是正解,我再多说两句:感觉你对多线程还不了解,其实我也不很了解,我把自己了解的给你说下。打个比喻,假如你和同学去银行办理业务,单线程的情况就是你们排成一队去窗口办理,多线程就是你们不排队一起去抢着挤到窗口去办理。在只有一个窗口的情况下,你们不但不会快反而会因为争抢窗口而浪费时间。窗口就相当于cup,你们每个人相当于一个线程(任务)。所以,单cup下多线程不一定会快。但是如果银行有多个窗口,你们抢窗口办理就会比只在一个窗口排成一队快,其他窗口都空着呢,干嘛只在一个窗口排队呢,这就是多cup的情况下多线程一般会快的原因。

在单cup下还有一种可能会使多线程比单线程快,那就是有阻塞的情况下。假如有个人没有带身份证办不了业务却占着窗口让后面排队的办不了业务(阻塞),如果是多线程情况下,就是你办不了业务是吧,其他人(线程)就会把你挤走,你回家拿身份证去吧。

  • java澶氱嚎绋嬫晥鐜囬棶棰
    绛旓細鏈涓昏鐨勬槸锛涓鑸潵璇村湪澶氭牳cpu涓嬶紝澶氱嚎绋嬬殑鏁堢巼鏄瘮鍗曠嚎绋嬬殑楂锛屼絾鏄繖涓珮鏄缓绔嬪湪鍒╃敤浜嗙┖闂茬殑cpu锛屽洜涓轰竴鑸潵璇碿pu浣跨敤鐜囬兘涓嶅緢楂橈紝浣犺繖涓▼搴忕殑璇濓紝cpu浣跨敤宸茬粡寰堥珮浜嗭紝澶氱嚎绋嬪苟涓嶈兘璁╀綘鐨勬晥鐜囧彉楂橈紝鍙嶈屽洜涓轰笂涓嬫枃鍒囨崲瀵艰嚧鍙樹綆锛屽叧閿湪浜庣悊瑙e绾跨▼涓鑸负浠涔堜細浣挎晥鐜囧彉楂樸
  • Java澶氱嚎绋嬮棶棰鎬荤粨?
    绛旓細锛2锛夐槻姝㈤樆濉 浠庣▼搴忚繍琛鏁堢巼鐨勮搴︽潵鐪嬶紝鍗曟牳CPU涓嶄絾涓嶄細鍙戞尌鍑澶氱嚎绋鐨勪紭鍔匡紝鍙嶈屼細鍥犱负鍦ㄥ崟鏍窩PU涓婅繍琛屽绾跨▼瀵艰嚧绾跨▼涓婁笅鏂囩殑鍒囨崲锛岃岄檷浣庣▼搴忔暣浣撶殑鏁堢巼銆備絾鏄崟鏍窩PU鎴戜滑杩樻槸瑕佸簲鐢ㄥ绾跨▼锛屽氨鏄负浜嗛槻姝㈤樆濉炪傝瘯鎯筹紝濡傛灉鍗曟牳CPU浣跨敤鍗曠嚎绋嬶紝閭d箞鍙杩欎釜绾跨▼闃诲浜嗭紝姣旀柟璇磋繙绋嬭鍙栨煇涓暟鎹惂锛屽...
  • java澶氱嚎绋鐨凜PU鍒╃敤鐜闂,鎬庝箞瑙e喅
    绛旓細涓鑸竴涓猚pu鏍稿績鍙互鎼浇涓や釜绾跨▼锛屼綘鏍规嵁鏍稿績鍘绘惌杞界嚎绋嬶紝涓嶈涔辨斁绾跨▼銆傝繕鏈変綘鏈10涓嚎绋嬪悓鏃惰窇鑰楁椂鎿嶄綔鏈灏戜篃瑕4鏍哥殑cpu锛屼綘鍙互鍑忓皯绾跨▼鎴栬呭噺灏戠嚎绋嬩腑鐨勮楁椂鎿嶄綔銆傚鏋滀綘鏄В鐮佹垨鑰呭帇缂╃▼搴忕殑璇濋偅涔坈pu100%涔熷緢姝e父锛屽鏋滄槸socket缃戠粶杩
  • java 寮澶氱嚎绋鍙嶈岃繕鍙樻參浜,鏄庝箞鍥炰簨,璇锋暀楂樻墜瑙g瓟銆
    绛旓細绾跨▼涔熸槸鏈夊紑閿鐨勶紝鑰屼笖杩樻湁鍚屾绛夋搷浣滐紝鎵浠ユц兘鐨勬彁鍗囦笌绾跨▼鐨勪娇鐢ㄥ苟鏃犵洿鎺ュ叧绯伙紱涓昏鏄畻娉曠骇鐨勫鏋滄暟鎹噺澶 锛岄偅鏌ヨ閫熷害浼氬揩锛屾瘯绔熸槸骞惰鐨勶紝鍙槸鏁版嵁閲忓皬鐨勬椂鍊欙紝浣犵嚎绋嬫彁鍗囩殑浣滅敤鏈夎繕浣庝笉杩囦粬鐨勫紑閿浜嗭紒鎬ц兘涔熶笉鏄嚟鎰熻鐨勶紝瑕佹湁浜嬪疄鏁版嵁锛
  • Java 澶氱嚎绋鍜屽崟绾跨▼鏁堢巼姣旇緝,鏈濂芥槸鑳戒笂浠g爜,鎴戜娇鐢ㄤ簡澶氱嚎绋嬪彂鐜拌楁椂鏇...
    绛旓細鍗曠嚎绋嬫瘮澶氱嚎绋嬫洿蹇備綘鐨勬祴璇曚唬鐮佸彧鏄敤浜咰PU璧勬簮銆鍥犱负澶氱嚎绋嬮渶瑕佸鐞嗙嚎绋嬬殑寮閿锛屽紑閿澶氫簡鑷劧娌℃湁鍗曠嚎绋嬪揩銆傚绾跨▼鏄负浜嗘洿鍏呭垎鐨勫埄鐢ㄨ绠楁満鐨勮祫婧愩傛瘮濡傜綉缁,IO,CPU...濡傛灉浣犲湪for寰幆閲屽姞鍏ヤ竴涓鐩樺啓鍏ユ搷浣滐紝澶氱嚎绋嬪氨浼氭瘮鍗曠嚎绋嬪揩浜
  • java 澶氱嚎绋嬮棶棰 鐪熺殑鎻愰珮浜鏁堢巼鍚?
    绛旓細寮鍙戜竴涓綉椤碉紝涓鍙扮數鑴戝悓鏃舵湁涓婂崈涓汉璁块棶浣犵殑tomcat锛屼竴鑸笉浼氭湁闂銆傛祻瑙堜篃椤虹晠銆傝繖灏辨槸骞跺彂鐨勪綔鐢ㄣ傝繖绉嶆儏鍐靛鏋滀娇鐢ㄥ崟绾跨▼銆備竴鍗冧釜浜烘湁999涓汉绛夌潃鐪嬩綘鐨勭綉椤碉紝鑰岀涓涓汉鎿嶄綔鐨勬椂鍊檆pu澶ч儴鍒嗘椂闂存槸绌洪棽鐨勩傛庝箞鍒╃敤璧锋潵灏辨垚浜嗕釜闂銆傝繖涔熷彨鏁堢巼銆傚鏋滅‘瀹炲繀椤昏鑰冭檻闂澶勭悊鐨鏁堢巼闂銆備綘璁块棶鏁版嵁...
  • JAVA澶氱嚎绋鍒板簳鑳戒笉鑳藉姞蹇▼搴忚繍琛岄熷害?
    绛旓細涓嶆槸璇澶氱嚎绋涓嶈兘鎻愰珮鏁堢巼锛岃繖涓鐪嬩綘椤圭洰鐨勬ц兘鐡堕鍦ㄥ摢閲屻 IO瀵嗛泦鍨嬶紝娌″繀瑕佸绾跨▼锛屽鏄撳紕宸ф垚鎷欍傚缓璁瓹ache锛屾煇浜涙枃浠剁郴缁熷湪椤哄簭璇绘垨鍐欑鐩樻椂閫熷害鐩稿綋蹇紝濡傛灉鎭板ソ鏂囦欢鏄『搴忓瓨鍌ㄥ湪纾佺洏涓婄殑锛屽缓璁厛灏介噺璇昏繘鍐呭瓨锛屽啀涓娆℃у啓鍑哄幓銆傚叾浠栦粈涔堢鐩樺唴瀛橀氶亾涔嬬被鐨勫簳灞傛妧鏈氨涓嶆槸Java鑳藉乏鍙崇殑浜嗐
  • java鐨勫绾跨▼鏄氦鏇垮崰鐢–PU,涓嶆槸鐪熸鐨勫苟琛岃繖涓拰鍗曠嚎绋嬩笉鏄竴鏍风殑鍚...
    绛旓細姣斿鏌绾跨▼闇瑕佸欢鏃剁瓑寰呮煇鎿嶄綔瀹屾垚,杩欐椂灏卞彲浠ョ敤绾跨▼璋冨害鎵ц鍏朵粬绛夊緟鎵ц鐨勭嚎绋,杩欐牱鏇村畬鍏ㄥ湴鍒╃敤浜哻pu鐨勬ц兘,鍥犳鏁堢巼楂
  • Java澶氱嚎绋嬮棶棰鍙婂鐞(绗旇)
    绛旓細绾跨▼浼樺厛绾 鍦ㄦ棩甯哥敓娲讳腑 渚嬪鐏溅鍞エ绐楀彛绛夌粡甯稿彲浠ョ湅鍒 XXX浼樺厛 閭d箞澶氱嚎绋缂栫▼涓瘡涓嚎绋嬫槸鍚︿篃鍙互璁剧疆浼樺厛绾у憿锛熷湪澶氱嚎绋嬬紪绋嬩腑 鏀寔涓烘瘡涓嚎绋嬭缃紭鍏堢骇 浼樺厛绾ч珮鐨勭嚎绋嬪湪鎺掗槦鎵ц鏃朵細鑾峰緱鏇村鐨凜PU鎵ц鏃堕棿 寰楀埌鏇村揩鐨勫搷搴 鍦ㄥ疄闄呯▼搴忎腑 鍙互鏍规嵁閫昏緫鐨勯渶瑕 灏嗛渶瑕佸緱鍒板強鏃跺鐞嗙殑绾跨▼璁剧疆鎴愯緝楂樼殑...
  • java鐨勫绾跨▼thread鏁堟灉涓嶅ソ
    绛旓細3涓绾跨▼浣犲氨鎯冲崰婊PU锛熶綘璺熶綘鐢佃剳鏈変粐涔堬紵浣犵湅鐪嬩綘鐨勭嚎绋嬫暟锛屾诲叡鏈2492涓紝澶氫綘杩3涓紵CPU鐨勫伐浣滀笉鏄垜浠兘瀹氱殑锛屾洿鍒鐢ㄤ唬鐮佹潵瀹氫簡锛岃繖绉嶅皬浜嬪氨鍘诲幓鍚
  • 扩展阅读:java多线程面试题 ... java线程安全问题 ... 为什么都不建议java转测试 ... java多线程实现方式 ... java多线程的使用 ... java多线程与高并发 ... java秒杀 多线程实例 ... redis面试题 ... java多线程并发面试题 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网