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); } } }



线程不安全产生的原理

线程的唤醒等待

Thread.sleep();与Object.wait();
1,普通情况
Thread.sleep();放弃cup权限
Object.wait();放弃cpu权限
2,同步代码块中
Thread.sleep();一直占用cpu,不会失去锁,其他线程会等待
Object.wait();放弃cpu权限,同时失去锁,其他线程会抢占cpu
浙公网安备 33010602011771号