java中如何启动一个新的线程
java开启新线程的三种方法:
方法1:继承Thread类
1):定义一个继承自Java.lang.Thread类的类A.
2):覆盖A类Thread类中的run方法。
3):我们编写需要在run方法中执行的操作:run方法中的代码,线程执行体。
4):在main方法(线程)中,创建一个线程对象并启动线程。
(1)创建线程类对象:
A类 a = new A类();
(2)调用线程对象的start方法:
a.start();//启动一个线程
注意:不要调用run方法。如果run方法被称为对象调用方法,则仍然只有一个线程,并且没有启动新线程。
创建启动线程实例:
方法2:实现Runnable接口
1):定义要在java.lang.Runnable接口中实现的类A.请注意,A类不是线程类。
2):覆盖A类Runnable接口中的run方法。
3):我们编写需要在run方法中执行的操作:在run方法中,线程执行。
4):在main方法(线程)中,创建一个线程对象并启动线程。
(1)创建线程类对象:
Thread t = new Thread(new A());
(2)调用线程对象的start方法:
t.start();
代码实例:
方法3:直接在函数体使用
扩展资料:
启动新线程的两种方式对比
继承方式:
1):从设计上分析,Java中类是单继承的,如果继承了Thread了,该类就不能再有其他的直接父类了.
2):从操作上分析,继承方式更简单,获取线程名字也简单.(操作上,更简单)
3):从多线程共享同一个资源上分析,继承方式不能做到.
实现方式:
1):从设计上分析,Java中类可以多实现接口,此时该类还可以继承其他类,并且还可以实现其他接口,设计更为合理.
2):从操作上分析,实现方式稍微复杂点,获取线程名字也比较复杂,得使用Thread.currentThread()来获取当前线程的引用.
3):从多线程共享同一个资源上分析,实现方式可以做到(是否共享同一个资源).
补充:实现方式获取线程名字:
String name = Thread.currentThread().getName();
绛旓細闇瑕佷粠Java.lang.Thread绫绘淳鐢涓涓柊鐨勭嚎绋绫伙紝閲嶈浇瀹冪殑run()鏂规硶锛涘疄鐜癛unnalbe鎺ュ彛锛岄噸杞絉unnalbe鎺ュ彛涓殑run()鏂规硶銆備絾锛屼负浠涔圝ava瑕佹彁渚涗袱绉嶆柟娉曟潵鍒涘缓绾跨▼鍛紵瀹冧滑閮芥湁鍝簺鍖哄埆锛熺浉姣旇岃█锛屽摢涓绉嶆柟娉曟洿濂藉憿锛熷湪Java涓锛岀被浠呮敮鎸佸崟缁ф壙锛屼篃灏辨槸璇达紝褰撳畾涔変竴涓柊鐨勭被鐨勬椂鍊欙紝瀹冨彧鑳芥墿灞曚竴涓閮...
绛旓細if(Thread.currentThread().getName().equals("F1涓鐨勭嚎绋ee")){ this.msg="鐢盕1涓殑绾跨▼鍏变韩鐨勫璞c81鐨刴sg锛岃F1涓殑绾跨▼ee鏀瑰彉浜嗭紝瀵艰嚧F1涓殑鍙涓涓绾跨▼ff鐨勮緭鍑轰篃鏀瑰彉浜";} else if(Thread.currentThread().getName().equals("F2涓殑绾跨▼ee")){ this.msg="F2涓殑绾跨▼ee锛屾敼鍙樹簡瀹...
绛旓細涓绾跨▼ public class TestthreadA extends Thread{ public static void main(String[] args) { new TestthreadA().start();} public void run(){ TestthreadB tb = new TestthreadB();tb.start();boolean flag = true;while(flag){ if(!tb.isAlive()){ System.out.println("绾跨▼B宸茬粨鏉...
绛旓細1.涓绾跨▼鍐欎釜寰幆3娆$殑寰幆 2.寰幆浣撳唴杩愯绾跨▼锛岃繍琛屽畬浠ュ悗璋冪敤wait()绛夊緟 3.绾跨▼鍦ㄨ繍琛岋紝濡傛灉鍑哄紓甯竛otifyAll()鍞ら啋涓荤嚎绋嬬户缁惊鐜
绛旓細1.涓绾跨▼鍐欎釜寰幆3娆$殑寰幆 2.寰幆浣撳唴杩愯绾跨▼锛岃繍琛屽畬浠ュ悗璋冪敤wait()绛夊緟 3.绾跨▼鍦ㄨ繍琛岋紝濡傛灉鍑哄紓甯竛otifyAll()鍞ら啋涓荤嚎绋嬬户缁惊鐜
绛旓細浠g爜杈撳叆閿欒閫犳垚鐨勶紝鎿嶄綔鏂规硶濡備笅锛1銆侀鍏堝湪java涓Thread杩欎釜绫荤殑瀹炰緥鍖栦唬琛ㄧ殑鏄嚎绋嬶紝鍚姩涓涓柊绾跨▼灏遍渶瑕佸垱寤轰竴涓柊鐨凾hread锛屽涓嬪浘鎵绀恒2銆佹帴鐫杈撳叆public Thread()锛涜繖鏄疶hread鐨勬棤鍙傛瀯閫犳柟娉曪紝濡備笅鍥炬墍绀恒3銆佺劧鍚庤緭鍏ublic Thread(String name)锛涘垱寤轰竴涓悕绉颁负name鐨勭嚎绋嬪璞°4銆佺户鎵...
绛旓細涓涓绾跨▼鍚冮澶达紝浠庣瀛愰噷鎷块澶村悆锛堝鏋滅閲屾湁棣掑ご锛夈傝繕鏈変竴鐐瑰氨鏄负浜嗙湅鍒版槑鏄剧殑绛夊緟鏁堟灉锛岀敤涓涓殢鏈烘暟鏉ュ喅瀹氬仛鍜屽悆鐨勯熷害銆傝繖鏍峰氨涓嶄細琛屾垚鍋氫竴涓紝鍚冧竴涓紝绡瓙姘歌繙瑁呬笉婊$殑涓嶇悊鎯虫晥鏋滐紒锛堟渶濂藉氨鏄仛绋嶅揩浜庡悆锛夎繖鏃讹紝褰撶瀛愭弧浜嗭紝浣犲氨搴旇璋冪敤wait()鏂规硶鏉ヨ鍋鐨勭嚎绋绛夊緟锛岃鍚冪殑绾跨▼灏嗙瀛...
绛旓細Java澶氱嚎绋嬫敮鎸侀渶瑕佹垜浠笉鏂殑杩涜鐩稿叧闂鐨勮В鍐 涓嬮潰鎴戜滑灏辨潵鐪嬬湅鍦ㄦ帴鍙i棶棰樹笂鐨勭浉鍏抽棶棰樿В鍐虫柟妗 杩欐牱鎵嶈兘鏇村ソ鐨勮繘琛屼笉鏂殑鍒涙柊鍜屽涔 甯屾湜澶у鏈夋墍浜嗚В Java澶氱嚎绋嬫敮鎸 鎵鏈夊疄鐜癛unnable鎺ュ彛鐨勭被閮藉彲琚鍚姩涓涓柊绾跨▼ 鏂扮嚎绋嬩細鎵ц璇ュ疄渚嬬殑run()鏂规硶 褰搑un()鏂规硶鎵ц瀹屾瘯鍚 绾跨▼灏辩粨鏉熶簡 涓鏃︿竴涓...
绛旓細t1.start(); //琛ㄧず鍚姩绾跨▼锛屾鏃剁嚎绋嬬湡姝e惎鍔ㄨ捣鏉ャ俆hread.sleep(timeout); //琛ㄧず璁╁綋鍓嶇嚎绋嬬潯鐪犱竴娈垫椂闂淬傝嚦浜庢瘡娆$粨鏋滀笉涓鏍凤紝寰堟甯革紝杩欎篃鏄鏄绾跨▼鐨勪竴涓鐗圭偣鈥斺斾笉纭畾鎬с
绛旓細package test;import java.util.*;public class Threadtest extends Thread{ int pauseTime;String name;public Threadtest(int time,String n){ pauseTime = time;name = n;} public void run(){ Calendar now;now = Calendar.getInstance();System.out.println(name+now.get(Calendar.MINUTE)+now...