JAVA線程用法詳解。本站提示廣大學習愛好者:(JAVA線程用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA線程用法詳解正文
本文合營實例較為具體的講授了Java的線程技巧,信任關於深刻懂得Java法式設計有必定的贊助。詳細以下:
許多人在進修JAVA時都對線程都有必定的懂得,而當我們開端接觸Android開辟時,才真真正正的發明了線程是多麽的主要,本文就把對Java線程的用法心得分享給年夜家,供年夜家參考。
起首,年夜家必定要分清線程和過程不是一回事,過程是甚麼呢?過程就如我們須要履行class文件,而線程才是真正挪用CPU資本來運轉的。一個class文件普通只要一個過程,但線程可以有許多個,線程的履行是一種異步的履行方法。
1、若何在main函數中再開啟一個線程:
示例代碼以下:
public class Thread_one {
public static void main(String [] args){
Run run = new Run();
//run.run();//此為辦法的挪用,和線程有著天地之別
Thread thread = new Thread(run);
thread.start();//啟動線程,挪用線程的run()辦法
for(int i=1; i<=20; i++){
System.out.println("主線程i的 值:--------"+i);
}
}
}
class Run implements Runnable{
@Override
public void run() {
for(int i=1; i<=20; i++){
System.out.println("子線程i的 值:"+i);
}
}
}
2、線程中的sleep辦法
示例代碼以下:
public class Thread_sleep {
/*
* 線程停留
*/
public static void main(String [] args){
Runone run = new Runone();
Thread thread = new Thread(run);
thread.start();
try {
Thread.sleep(5000);
thread.interrupt();//中止線程的履行
//thread.stop();//絕對中止線程,stop過於粗魯,不建議應用,普通在須要強迫封閉子線程時方應用此辦法
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Runone implements Runnable{
@Override
public void run() {
for(int i=1 ; i<10; i++){
try {
Thread.sleep(1000);
System.out.println("-----"+new Date()+"-----");
} catch (InterruptedException e) {
return ;//當捕捉到子線程被中止時,直接封閉子線程
}
}
}
}
在這裡特殊解釋一點,thread.interrupt();可以中止線程的履行,絕對stop溫順那末一點點,不外還不是最好的封閉線程的辦法,上面就為年夜家供給一種方法:
public class Thread_stop {
public static void main(String [] args){
Runthree run = new Runthree();
Thread th = new Thread(run);
th.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
run.setStop();
}
}
class Runthree implements Runnable{
boolean flag;
@Override
public void run() {
flag = true;
int i = 0;
while(flag){
try {
System.out.println("子線程----"+(i++));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void setStop(){
flag = false;
}
}
上面就簡略給年夜家引見一下線程中的歸並和讓出:
1、若何歸並線程,此處挪用了join()辦法
示例代碼以下:
public class Thread_join {
/*
* 歸並線程
*/
public static void main(String [] args){
Runtwo run = new Runtwo();
Thread thread = new Thread(run);
thread.start();
try {
thread.join();//歸並線程,此時相當於辦法挪用
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0; i<10; i++){
System.out.println("主線程:"+i);
}
}
}
class Runtwo implements Runnable{
@Override
public void run() {
for(int i=0; i<10; i++){
System.out.println("子線程:----"+i);
}
}
}
2、若何讓出線程,此處挪用了Thread的yield()辦法,以下所示:
public class Thread_yield {
/**讓出CPU
* @param args
*/
public static void main(String[] args) {
Th th = new Th("aaa");
th.start();
for(int i = 0 ; i<=10; i++){
System.out.println("主線程----"+i);
}
}
}
class Th extends Thread{
Th(){}
Th(String s){super(s);}
@Override
public void run() {
for(int i = 0; i<=10; i++){
if(i%3!=0){
System.out.println("子線程"+i);
}else{
System.out.println("子線程i="+i+" 線程停止切換");
yield();//從Thread繼續方可以使用此辦法
}
}
}
}
最初和年夜家分享一下關於線程的優先級的成績,代碼以下所示:
public class Thread_priority {
/*
* priority設置線程的優先級
* Thread默許的優先級為5;Thread的最年夜優先級為10,最小為0
*/
public static void main(String [] args){
T1 t1 = new T1();
T2 t2 = new T2();
t1.start();
//t1.setPriority(Thread.NORM_PRIORITY+3);//設置t1的優先級
t2.start();
}
}
class T1 extends Thread{
@Override
public void run() {
for(int i = 0; i<50; i++){
System.out.println("線程T1-----"+i);
}
}
}
class T2 extends Thread{
@Override
public void run() {
for(int i = 0; i<50; i++){
System.out.println("線程T2"+i);
}
}
}
信任年夜家經由過程以上代碼根本曾經懂得JAVA中的線程機制,願望本文所述對年夜家深刻進修Java法式設計有所贊助。