⑴ java多线程共同操作同一个队列,怎么实现
以下是两个线程:
import java.util.*;
public class Thread_List_Operation {
//假设有这么一个队列
static List list = new LinkedList();
public static void main(String[] args) {
Thread t;
t = new Thread(new T1());
t.start();
t = new Thread(new T2());
t.start();
}
}
//线程T1,用来给list添加新元素
class T1 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}
}
}
//线程T2,用来给list添加新元素
class T2 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}
}
}
//结果(乱序)
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
⑵ Java涓鍏充簬濡备綍瀹炵幇澶氱嚎绋嬫秷鎭阒熷垪镄勫疄渚(java澶氱嚎绋嬮氢俊)
java涓镄勬秷鎭阒熷垪
娑堟伅阒熷垪鏄绾跨▼闂撮氲镄勬坠娈碉细
importjava.util.*
publicclassMsgQueue{
privateVectorqueue=null;
publicMsgQueue(){
queue=newVector();
}
publicvoidsend(Objecto)
{
queue.addElement(o);
}
publicObjectrecv()
{
if(queue.size()==0)
returnnull;
Objecto=queue.();
queue.(0);//orqueue[0]=nullcanalsowork
returno;
}
}
锲犱负java涓鏄痩ockedbyobject镄勬墍浠ユ坊锷犲氨鍙浠ョ敤浜庣嚎绋嫔悓姝ラ挛瀹氩硅薄
鍙浠ヤ綔涓哄氱嚎绋嫔勭悊澶氢换锷$殑瀛樻斁task镄勯槦鍒椼备粬镄刢lient鍖呮嫭灏佽呭ソ镄则ask绫讳互鍙妕hread绫
Java镄勫氱嚎绋-绾跨▼闂寸殑阃氢俊2009-08-2521:58
1.绾跨▼镄勫嚑绉岖姸镐
绾跨▼链夊洓绉岖姸镐侊纴浠讳綍涓涓绾跨▼镶瀹氩勪簬杩椤洓绉岖姸镐佷腑镄勪竴绉嶏细
1)浜х敓锛圢ew锛夛细绾跨▼瀵硅薄宸茬粡浜х敓锛屼絾灏氭湭琚钖锷锛屾墍浠ユ棤娉曟墽琛屻傚傞氲繃new浜х敓浜嗕竴涓绾跨▼瀵硅薄钖庢病瀵瑰畠璋幂敤start()鍑芥暟涔嫔墠銆
2)鍙镓ц岋纸Runnable锛夛细姣忎釜鏀鎸佸氱嚎绋嬬殑绯荤粺閮芥湁涓涓鎺掔▼鍣锛屾帓绋嫔櫒浼氢粠绾跨▼姹犱腑阃夋嫨涓涓绾跨▼骞跺惎锷ㄥ畠銆傚綋涓涓绾跨▼澶勪簬鍙镓ц岀姸镐佹椂锛岃〃绀哄畠鍙鑳芥e勪簬绾跨▼姹犱腑绛夊緟鎺掓帓绋嫔櫒钖锷ㄥ畠锛涗篃鍙鑳藉畠宸叉e湪镓ц屻傚傛墽琛屼简涓涓绾跨▼瀵硅薄镄剆tart()鏂规硶钖庯纴绾跨▼灏卞勪簬鍙镓ц岀姸镐侊纴浣嗘樉钥屾槗瑙佺殑鏄姝ゆ椂绾跨▼涓崭竴瀹氭e湪镓ц屼腑銆
3)姝讳骸锛图ead锛夛细褰扑竴涓绾跨▼姝e父缁撴潫锛屽畠渚垮勪簬姝讳骸鐘舵併傚备竴涓绾跨▼镄剅un()鍑芥暟镓ц屽畬姣曞悗绾跨▼灏辫繘鍏ユ讳骸鐘舵併
4)锅沧粸锛圔locked锛夛细褰扑竴涓绾跨▼澶勪簬锅沧粸鐘舵佹椂锛岀郴缁熸帓绋嫔櫒灏变细蹇界暐瀹冿纴涓嶅瑰畠杩涜屾帓绋嬨傚綋澶勪簬锅沧粸鐘舵佺殑绾跨▼閲嶆柊锲炲埌鍙镓ц岀姸镐佹椂锛屽畠链夊彲鑳介吨鏂版墽琛屻傚傞氲繃瀵逛竴涓绾跨▼璋幂敤wait()鍑芥暟钖庯纴绾跨▼灏辫繘鍏ュ仠婊炵姸镐侊纴鍙链夊綋涓ゆ″硅ョ嚎绋嬭皟鐢╪otify鎴杗otifyAll钖庡畠镓嶈兘涓ゆ″洖鍒板彲镓ц岀姸镐併
2.classThread涓嬬殑甯哥敤鍑芥暟鍑芥暟
2.1suspend()銆乺esume()
1)阃氲繃suspend()鍑芥暟锛屽彲浣跨嚎绋嬭繘鍏ュ仠婊炵姸镐併傞氲繃suspend()浣跨嚎绋嬭繘鍏ュ仠婊炵姸镐佸悗锛岄櫎闱炴敹鍒皉esume()娑堟伅锛屽惁鍒栾ョ嚎绋嬩笉浼氩彉锲炲彲镓ц岀姸镐併
2)褰撹皟鐢╯uspend()鍑芥暟钖庯纴绾跨▼涓崭细閲婃斁瀹幂殑钬滈挛镙囧织钬濄
渚11锛
classextendsThread{
publicstaticintshareVar=0;
public(Stringname){
super(name);
}
publicvoidrun(){
if(shareVar==0){
for(inti=0;i<5;i){
shareVar;
if(shareVar==5){
this.suspend();//锛1锛
}}}
else{
System.out.print(Thread.().getName());
System.out.println("shareVar="shareVar);
this.resume();//锛2锛
}}
}
publicclassTestThread{
publicstaticvoidmain(String[]args){
t1=new("t1");
t2=new("t2");
t1.start();//锛5锛
//t1.start();//锛3锛
t2.start();//锛4锛
}}