一、理论
1.进程与线程
3.线程:
5.创建线程的两种方式:
<1>采用实现Runnable接口方式的多线程:
劣势是:编程稍稍复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
<2>采用继承Thread类方式的多线程:
优势是:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。
二、实例
下面演示了实现Clallable和Runnable接口创建线程,并使用了接口实现类和Lambda表达式(匿名内部类两种方式):
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class TestThread <span style="font-family: Arial, Helvetica, sans-serif;">{</span> public static void main(String[] args)
{
// runThread();
callThread();
}
public static void runThread()
{
//实现Runnable接口
for(int i=0;i<10;i++)
{
new Thread(new RunableThread(),"实现Runnable接口创建的线程 : "+i).start();
//Lambda表达式创建线程的代码将被大大简化
new Thread((Runnable)()->{
for(int j=0;j<10;j++)
{
System.out.println(Thread.currentThread().getName()+"------------"+j);
}
},"实现Runnable接口并使用Lambda表达式创建的线程").start();
}
}
public static void callThread()
{
FutureTask<Integer> task=null;
for(int i=0;i<10;i++)
{
task=new FutureTask<Integer>(new CallableThread());
new Thread(task,"实现Callable接口的线程类").start();
}
//Lambda表达式创建线程的代码将被大大简化
FutureTask<Integer> task2=new FutureTask<Integer>((Callable<Integer>)()->{
Integer i=6;
while(i<900)
{
System.out.println(Thread.currentThread().getName()+"******************"+i++);
}
return i;
});
new Thread(task2,"Lambda表达式实现Callable接口的线程类").start();
}
}
//实现Callable接口的线程类
class CallableThread implements Callable<Integer>
{
private int i=0;
@Override
public Integer call() throws Exception
{
while(i<50)
{
System.out.println(Thread.currentThread().getName()+"----------"+i++);
}
return i;
}
}
//实现Runnable接口的线程类
class RunableThread implements Runnable
{
private int i=0;
@Override
public void run()
{
for(;i<10;i++)
{
System.out.println(Thread.currentThread().getName()+"------------"+i);
}
}
}
原文地址:http://blog.csdn.net/sinat_26342009/article/details/45723989