Java 多线程的使用
1.继承Thread,实现多线程
public class MyThread extends Thread {
public MyThread(String name){
super(name);
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----------"+i);
}
}
public static void main(String[] args) {
Thread thread = new MyThread("liqq");
thread.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----------"+i);
}
}
}
2.实现线程接口Runnable
public class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----------"+i);
}
}
public static void main(String[] args) {
Runnable target = new MyRunnable();
Thread thread = new Thread(target);
thread.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----------"+i);
}
}
}
3.实现带有返回值的线程Callable
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class MyCallable implements Callable<String> {
private int n;
public MyCallable(int n) {
this.n = n;
}
public String call() throws Exception {
int count = 0;
for (int i = 1; i <= n; i++) {
count += i;
}
return "统计1~" + n + "的和为:" + count;
}
public static void main(String[] args) {
Callable<String> myCall = new MyCallable(10);
FutureTask<String> myFuture = new FutureTask<>(myCall);
Thread thread = new Thread(myFuture);
thread.setName("liqq")
thread.start();
Callable<String> call = new MyCallable(100);
FutureTask<String> future = new FutureTask<>(call);
Thread thread1 = new Thread(future);
thread1.start();
try {
String s = myFuture.get();
System.out.println(s);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
try {
String s = future.get();
System.out.println(s);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
4.线程常用api
Thread.currentThread();
Thread.currentThread().setName();
Thread.currentThread().getName();
Thread.sleep(Long millis);
final void setPriority(int newPriority);