extends Thread
public class TestThread extends Thread //创建线程方法
{
@Override
public void run() { //实现run方法
for (int i = 0; i <20 ; i++) {
System.out.printf("###"+i);
}
}
public static void main(String[] args) {
TestThread ad = new TestThread(); //创建对象
ad.start(); //调用
for (int i = 0; i < 20; i++) {
System.out.printf("****"+i);
System.out.printf("test");
}
}
}
可能我们的CPU跑的很快,所以在DEBUG的情况下可以看到下面的执行输出,注意:线程开启不一定是立即执行,由CUP调度执行。
implements Runnable
public class TestThread implements Runnable { //实现线程接口
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.printf("###"+i);
}
}
public static void main(String[] args) {
TestThread ad = new TestThread(); //创建
new Thread(ad).start(); //调用线程
for (int i = 0; i < 20; i++) {
System.out.printf("****"+i);
System.out.printf("test");
}
}
}
当多个人同时抢占资源的话,这个线程将变得不安全了,数据非常混乱。
使用Callable<String>创建线程
使用Callable<String>创建的线程可以返回结果和抛出异常,但是相对于其他线程他的代码编写会稍微复杂。
public class TestThread implements Callable<String> { //创建线程,返回类型为String
private String name;
public TestThread(String namePas){ //随机定于构造函数
this.name = namePas;
}
@Override
public String call() throws Exception {
return Thread.currentThread().getName(); //输出调用者名字
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestThread d1 = new TestThread("111"); //创建对象,设置名字
TestThread d2 = new TestThread("222");
TestThread d3 = new TestThread("333");
//创建3个线程
ExecutorService ad = Executors.newFixedThreadPool(3); //开3个线程池
Future<String> re = ad.submit(d1); //调用开始
Future<String> re1 = ad.submit(d2);
Future<String> re2 = ad.submit(d3);
String ad1 = re.get(); //输出调用返回结果
String ad2 = re1.get();
String ad3 = re2.get();
}
}