package cn.Fourth;
/**
* 今天使用Java的lambda表达式走一个关于Runnable的优化Demo;
*/
public class ThreadTest {
/**
* Java主函数|入口;
* @param args
*/
public static void main(String[] args) {
/** 实现线程的第一种方式:
* Thread!
*/
// MyThread myThread = new MyThread("1");
/**
* 线程启动;
* start();
*/
// myThread.start();
/**
* 实现线程的第二种方式:
* Runnable;
*/
// MyRunnable myRunnable = new MyRunnable();
/**
* Runnable自身是一个接口,自身无法实现启动线程得到动作;
* 所以需要实例化一个Thread对象来操作线程的启动;
*/
// Thread thread = new Thread(myRunnable,"Mr's Niu");
// 启动线程;
// thread.start();
/**
* 调用封装好的函数式接口;
* {}花括号内饰要做的事情!
*/
goThisRun(() ->{
String str = "opl";
for (int i=0;i<str.length();i++) {
System.out.println(str.charAt(i));
}
});
}
/**
* Lambda表达式的常规写法;
* @param upRunnable
*/
private static void goThisRun(UpRunnable upRunnable) {
upRunnable.goRun();
}
}
/**
* 创建自己的线程类;
* 使用Thread的方式获取线程!
*/
class MyThread extends Thread {
// 利用构造进行线程名称赋值;
public MyThread(String name) {
super(name);
}
// 实现对应的run()方法;
public void run() {
// Codding...
String str = "abc";
for (int i=0;i<str.length();i++) {
System.out.println(str.charAt(i));
}
}
}
/**
* 创建自己的第二个线程类:
* 使用Runnable的方式获取;
*/
class MyRunnable implements Runnable {
// 实现对应的run()方法;
@Override
public void run() {
// Codding...
String str = "efg";
for (int i=0;i<str.length();i++) {
System.out.println(str.charAt(i));
}
}
}
/**
* Lambda函数式接口编程:
* 利用Lambda函数接口的方式进行优化Runnable的实现;
*
* @FunctionalInterface标记的接口编译器会自动检索是否有且仅有一个抽象方法;
* 否则会报错;
*/
@FunctionalInterface
interface UpRunnable {
// 简化;省略public abstract!
void goRun();
}