一、線程的創建方式
- 利用Thread子類創建線程
- 直接創建線程對象,然後實現Runnable接口。
①下面是一個利用線程子類創建一個簡單線程的demo
CreateThread類
public class CreateThread extends Thread {
public void run(){
for(int i=0;i<10;i++){
System.out.println("No."+i);
}
}
public static void main(String args[]){
CreateThread ct = new CreateThread();
CreateThread01 ct01 = new CreateThread01();
ct.start();
ct01.start();
}
}
測試類
public class CreateThread01 {
public void run(){
for(int i=0;i<10;i++){
System.out.println("--"+i);
}
}
}
②利用Runnable創建一個線程的小demo [其中,run()方法是必須實現的方法]
public class ThreadMain {
public static void main(String arga[]){
ThreadRunnable tr1 = new ThreadRunnable();
ThreadRunnable tr2 = new ThreadRunnable();
Thread t1 = new Thread(tr1);
Thread t2 = new Thread(tr2);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
}
public class ThreadRunnable implements Runnable{
@Override
public void run() {
int flag = 1;
// TODO Auto-generated method stub
String name = Thread.currentThread().getName();
if(name.equals("t1")){
System.out.print("現在執行的線程是:t1");
}else{
System.out.print("現在執行的線程是:t2");
}
}
}
二、線程的簡單應用
- 介紹線程中常用的sleep()方法
- 計時器線程Timer類
①利用sleep()方法,每隔一秒打印一次當前時間
構造方法:sleep(int millsecond)單位:毫秒
public class TimerMain {
public static void main(String args[]){
CountTime ct = new CountTime();
Thread t = new Thread(ct);
t.start();
}
}
public class CountTime implements Runnable{
SimpleDateFormat m = new SimpleDateFormat("hh:mm:ss");
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
Date date = new Date();
System.out.println(m.format(date));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
②讓所要執行的代碼過一段時間執行
(比如可以利用Timer類實現一個鬧鐘,每隔隔一秒獲取一次系統時間,當設置時間等於系統時間,鬧鈴等。。。好吧,那其實是我android課上利用Timer寫的一個程序)
下面這個小demo,用到類Timer類常用的schedule() 方法,下面是它的構造方法
- public void schedule(TimerTask task,long delay)
- public void schedule(TimerTask task,Date time)
- public void schedule(TimerTask task,long delay,long period)
- public void schedule(TimerTask task,Date firstTime,long period)
public class TimerMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Timer t = new Timer();
long startTime = System.currentTimeMillis();
t.schedule(new TimerTask(){
int flag = 1;
@Override
public void run() {
// TODO Auto-generated method stub
long endTime = System.currentTimeMillis();
System.out.print("過了"+String.valueOf(endTime-startTime)+"該語句開始執行");
flag=0;
if(flag==0){
t.cancel();
}
}},1000,1000);
}
}
關於對線程的學習,初學者可能覺得他沒什麼用,其實我學了java兩年了,最近在學Android才發現線程很重要很重要的一章。我也是爲此來複習線程的一些簡單知識。有興趣的人還可以看看,java有多多線程編程,其中的種種,不是我能述盡的。提供一個傳送門 https://www.runoob.com/java/java-multithreading.html