Java记录

1.可变参数注意事项

 1 public class ArrDemo {
 2     public static void main(String[] args) {
 3         int mun=demo(7,7,7);
 4         System.out.println(mun);
 5     }
 6 
 7     public static int demo(int... ints){
 8         int mun = 0;
 9         for (int i:ints) {
10             mun+=i;
11         }
12         return mun;
13     }
14 }
实例

2.线程

创建线程有两种方法

  1.继承Thread,重写run方法

  2.实现Runnable接口,重写run方法,把实现类对象作为参数传入Thread(Runnable r)

    Thread thread=new Thread(Runnable r);

注意:实现Runnable接口的好处(尽量使用Runnable接口实现来创建线程)

 

/*
    1.线程创建
        创建一个类继承线程类作为线程子类
    2.在子类中覆盖重写线程类(父类)run方法
    3.创建子类对象(多态)
        Thread thread1=new Thread1();
    4.启动线程
        thread1.start();
    Thread.currentThread().getName()可获取线程名称
    Thread.sleep();线程睡眠
 */
public class Thread1 extends Thread {
    @Override
    public void run() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "运行了"+i);
        }
    }
}

class Thread2 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "运行了"+i);
        }
    }
}
class Test{
    public static void main(String[] args) {
        Thread thread1=new Thread1();
        thread1.start();
        Thread2 thread2=new Thread2();
        Thread thread=new Thread(thread2);
        thread.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main运行了"+i);
        }
    }
}
View Code

线程不安全产生的原理

线程的唤醒等待

Thread.sleep();与Object.wait();

1,普通情况 

  Thread.sleep();放弃cup权限

  Object.wait();放弃cpu权限

2,同步代码块中

  Thread.sleep();一直占用cpu,不会失去锁,其他线程会等待

  Object.wait();放弃cpu权限,同时失去锁,其他线程会抢占cpu

 

posted @ 2022-03-08 21:16  剑破云霄  阅读(22)  评论(0)    收藏  举报