第一种方法:
1、线程
package com.wyq.thread;
public class MyThread extends Thread{
@Override
public void run() {
for(int i = 0;i<=5;i++){
//Thread.curentThread()用于获取当前线程的对象,getName(),用于获取线程名称
System.out.println(Thread.currentThread().getName()+"Thread线程中的方法——————>"+i);
}
}
}
2、测试
package com.wyq.thread;
public class TestThread {
public static void main(String[] args) {
//创建线程类对象
MyThread my = new MyThread();
//线程启动
my.start();
//主线程中的循环
for(int i = 0;i<=5;i++){
System.out.println("主线程中的方法——————>"+Thread.currentThread().getName()+"————>"+i);
}
}
}
第二种方法:
1、线程
package com.wyq.thread;
public class MyThread4 implements Runnable{
private int ticket = 5;
@Override
public void run() {
for(int i = 0;i<4;i++){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"正在卖第"+i+"张票");
}
}
}
}
2、测试
package com.wyq.thread;
public class TestThread4 {
public static void main(String[] args) {
//创建线程类对象
MyThread4 my = new MyThread4();
//创建三个代理类
Thread t1 =new Thread(my,"A窗口");
Thread t2 = new Thread(my, "B窗口");
Thread t3 = new Thread(my,"C窗口");
//启动线程
t1.start();
t2.start();
t3.start();
}
}
第三种方法:
1、线程类
package com.wyq.thr;
import java.util.concurrent.Callable;
public class RandomCallable implements Callable{
/**
* 实现callable()方法是需要有一定的返回值的
*/
@Override
public Object call() throws Exception {
return Math.random();
}
}
2、测试类
package com.wyq.thr;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class TestCallable {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//创建任务类
RandomCallable rc = new RandomCallable();
//任务管理器 Runnable的线程是类,是对象
FutureTask<Integer> ft = new FutureTask<>(rc);
//创建代理类的对象
Thread t1 = new Thread(ft, "张三");
//判断线程是否执行完毕
System.out.println("任务是否执行完毕"+ft.isDone());
//才会执行call()方法中的代码
t1.start();
/**
* 在主线程中获取结果
* 这个时候call()方法未必执行完毕
* 有可能执行到获取结果时,而结果还没有计算出来
*/
System.out.println("获取结果"+ft.get());//导致后边的代码没法执行
System.out.println("是否执行完毕:"+ft.isDone());
}
}
在Java中JDK1.5开始,实现多线程的方式,有三种,实现Callable接口
call()方法的好处
(1)有返回值
(2)可以抛出异常
(3)支持泛型
总结:
1)实现多线程的三种方法【extends Thread,implements Runnable接口,implementscallable接口】
2)线程的启动 start()
3)线程的同步:synchronized
4)线程同步的封装成类
5)线程的等待与唤醒
6)线程中的各种方法