文章目录
lamda表达式
简单介绍和示例
好处
函数式接口
代码简化过程
package Thread;
public class Lambda1 {
//3.静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
like = new Like2();
like.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
like = new Like3();
like.lambda();
//5.匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
like.lambda();
//6.lambda简化
like = () ->{
System.out.println("i like lambda5");
};
like.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//2.实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
lambda本身的简化过程
package Thread;
public class lambda2 {
static class Love implements ILove{
@Override
public void love(int a) {
System.out.println("i love you " + a);
}
}
public static void main(String[] args) {
//ILove love = new Love();
//love.love(2);
ILove love = (int a) -> {
System.out.println("i love you " + a);
};
//简化类型
love = (a) -> {
System.out.println("i love you " + a);
};
//简化括号
love = a -> {
System.out.println("i love you " + a);
System.out.println("i love you hyy");
};
//简化花括号
//love = a -> System.out.println("i love you " + a);
love.love(521);
}
}
interface ILove{
void love(int a);
}
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("i love you " + a);
}
}
线程停止
线程状态
线程方法
停止线程
package Thread;
//测试stop
//1.建议线程正常停止-->利用次数,不建议死循环
//2.建议使用标志位-->设置一个标志位
//3.不要使用stop或者destroy等过时或者jdk不建议使用的方法
public class TestStop implements Runnable{
//1.设置一个标识位
private boolean flag = true;
@Override
public void run() {
int i = 0 ;
while(flag)
{
System.out.println("run.....Thread"+i++);
}
}
//2.设置一个公开的方法停止线程,转换标志位
public void Stop(){
this.flag = false;
}
public static void main(String[] args) {
TestStop testStop = new TestStop();
new Thread(testStop).start();
for (int i = 0; i < 1000; i++) {
System.out.println("main" + i);
if(i == 900){
//调用stop方法切换标志位,让线程停止
testStop.Stop();
System.out.println("the thread is over");
}
}
}
}
线程休眠
package Thread;
//多个线程同时操作同一个对象
//买火车票的例子
// 发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱。
public class TestThread4 implements Runnable{
//票数
private int ticketNums = 10;
@Override
public void run() {
while (true){
if(ticketNums <= 0) break;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-->take the number"+ticketNums--+"ticket");
}
}
public static void main(String[] args) {
TestThread4 ticket = new TestThread4();
new Thread(ticket,"xiaoming").start();
new Thread(ticket,"teacher").start();
new Thread(ticket,"huangniu").start();
}
}
倒计时
package Thread;
public class TestSleep2 {
//模拟倒计时
public static void tenDown() throws InterruptedException{
int num = 10 ;
while(true)
{
Thread.sleep(1000);
System.out.println(num--);
if(num <= 0) break;
}
}
public static void main(String[] args) {
try {
tenDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
线程礼让
package Thread;
//测试礼让进程
// 礼让不一定成功,看CPU心情
public class TestYield {
public static void main(String[] args) {
MyYield myYield = new MyYield();
new Thread(myYield,"a").start();
new Thread(myYield,"b").start();
}
}
class MyYield implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"The Thread is starting");
Thread.yield();
System.out.println(Thread.currentThread().getName()+"The Thread is ending");
}
}
线程强制执行_join
package Thread;
// 测试join方法
public class TestJoin implements Runnable {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("Thread VIP is coming" + i);
}
}
public static void main(String[] args) throws InterruptedException{
TestJoin testJoin = new TestJoin();
Thread thread = new Thread(testJoin);
thread.start();
// 主线程
for (int i = 0; i < 1000; i++) {
if(i == 200){
thread.join();//插队
}
System.out.println("main" + i);
}
}
}
观测线程状态
package Thread;
//观察测试线程的状态
public class TestState {
public static void main(String[] args) {
Thread thread = new Thread(() ->{
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("");
});
//观察状态
Thread.State state = thread.getState();
System.out.println(state); //NEW
//观察启动后
thread.start();//启动线程
state = thread.getState();
System.out.println(state); //RUN
while(state != Thread.State.TERMINATED){//只要线程不终止,就一直输出状态
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
state = thread.getState(); // 更新线程状态
System.out.println(state);
}
}
}
死亡之后的线程不能重新开始
线程的优先级
主要还是看cpu状态,只不过优先级高的权重大
package Thread;
//测试线程的优先级
public class TestPriority {
public static void main(String[] args) {
//主线程默认优先级
System.out.println(Thread.currentThread().getName() + "-->" + Thread.currentThread().getPriority());
MyPriority myPriority = new MyPriority();
Thread t1 = new Thread(myPriority);
Thread t2 = new Thread(myPriority);
Thread t3 = new Thread(myPriority);
Thread t4 = new Thread(myPriority);
Thread t5 = new Thread(myPriority);
Thread t6 = new Thread(myPriority);
//先设置优先级,再启动
t1.start();
t2.setPriority(1);
t2.start();
t3.setPriority(4);
t3.start();
t4.setPriority(Thread.MAX_PRIORITY);
t4.start();
/*t5.setPriority(-1);
t5.start();
t6.setPriority(11);
t6.start();*/
}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "-->" + Thread.currentThread().getPriority());
}
}
守护线程
package Thread;
//测试守护线程
//上帝守护你
public class ThreadDaemon {
public static void main(String[] args) {
God god = new God();
Yo yo = new Yo();
Thread thread = new Thread(god);
thread.setDaemon(true); //默认是FALSE表示是用户线程,正常的线程是用户线程。。。
thread.start();//上帝守护线程启动
new Thread(yo).start(); // you 用户线程启动。。。
}
}
//you
class Yo implements Runnable{
@Override
public void run() {
for (int i = 0; i < 36500; i++) {
System.out.println("please live a happy life");
}
System.out.println("-==== goodbye! hyy!======");
}
}
//god
class God implements Runnable{
@Override
public void run() {
while(true){
System.out.println("god is protecting you");
}
}
}