java多线程的三种创建方法

//:通过继承Thread的类并重写run()方法
//:定义一个类实现Runnable接口中的run()方法,将对象作为参数传给Thread的实例中,然后用Threadstart()开始多线程
//三:

//声明类去实现Callable中的call()方法,call方法有返回值
//然后使用FutureTask类去包装Callable 的对象,用get()方法获得返回值
//FutureTask的对象做Thread的参数

//四:Java8开始,使用Lambda表达式去创建Callable对象,不需要先去创建Callable类

测试一
public class CreateThread extends Thread{
public void run()
{
int a = 0;
for(;a<10;a++)
{
System.out.println(this.getName()+a);
}
}
public static void main(String[] args) {
//:通过继承Thread的类并重写run()方法
CreateThread ct=new CreateThread();
ct.start();
char a = 'a';
for(;a<'z';a++)
{
System.out.println(Thread.currentThread().getName()+a);
}
}
}

测试二
public class Runnable {
public static void main(String[] args) {
Thread ct=new Thread(new te());
ct.start();
char a = 'a';
for(;a<'z';a++)
{
System.out.println(Thread.currentThread().getName()+a);
}
}

}
class te implements java.lang.Runnable
{
@Override
public void run() {
//获取当前线程的名字
for(int a=0;a<10;a++)
{
System.out.println(Thread.currentThread().getName()+a);
}
}
}
测试三

public class CallableAndFuture {
public static void main(String[] args) {
FutureTask<Integer> ft= new FutureTask<>(new no());
new Thread(ft,"自定义名称").start();
try {
System.out.println("自定义名称线程的返回值"+ft.get());
}catch (InterruptedException e)
{
e.printStackTrace();
}catch (ExecutionException e)
{
e.printStackTrace();
}
//编写主线程的方法
char a = 'a';
for(;a<'z';a++)
{
System.out.println(Thread.currentThread().getName()+a);
}
}
}
//实现Callable中的call()
class no implements Callable{
@Override
public Integer call() throws Exception {
int b=0;
for(int i=1;i<101;i++)
{
b+=i;
System.out.println(Thread.currentThread().getName()+i);
}
return b;
}
}
测试四:

public class Lambda {
public static void main(String[] args) {
//实现Callable中的call()
FutureTask<Integer> ft= new FutureTask<>(
( Callable<Integer>)()->
{
int b=0;
for(int i=1;i<101;i++)
{
b+=i;
System.out.println("lambda"+Thread.currentThread().getName()+i);
}
return b;
}
);
new Thread(ft,"自定义名称").start();
try {
System.out.println("自定义名称线程的返回值"+ft.get());
}catch (InterruptedException e)
{
e.printStackTrace();
}catch (ExecutionException e)
{
e.printStackTrace();
}
//编写主线程的方法
char a = 'a';
for(;a<'z';a++)
{
System.out.println(Thread.currentThread().getName()+a);
}
}
}
 
 
posted @ 2021-11-27 09:42  遇雨青峰  阅读(75)  评论(0编辑  收藏  举报