JAVA多线程

①什么是多线程:


   开启一个程序就是开启一个进程;一个进程中不同的任务是不同的线程。


②线程的生命周期:

  • new(新创建)

  • Runnable(包含就绪、运行状态)

  • Blocked(被阻塞)

  • Waiting(等待)

  • Timed Waiting(计时等待)

  • Terminated(被终止)

③线程的调度:

Java是抢占式调度模型,哪个线程的优先级比较高,抢到的cpu时间片概率就高些
其他编程语言中还有均分式调度模型


④ 线程优先级:

最高10,最低1,默认是5

⑤线程常用方法:


yield:所在当前线程礼让,不一定成功
join:线程的插队,所在当前线程阻塞

⑥怎么解决线程安全问题(排他锁、互斥锁)

  1. 先使用局部变量代替“实例变量”和”静态变量“
  2. 如果必须是实例变量,可以考虑创建多个对象,这样实例变量的内存不共享
  3. 如果不能使用局部变量,对象也不能创建多个,选择同步机制

 synchronized (this){//这种同步机制最灵活
           //取款之前余额
           double before = this.getBalance();
           //取款之后余额
           double after = before - money;
           //更新余额
           this.setBalance(after);
       }

⑦线程有三种实现方式:

  1. 继承Threadl类实例化后再start
  2. 实现接口的对象要作为参数放到Thread类实例化成线程对象再启动new Thread(myThread,"小青").start();好处是避免了单继承限制可以多个线程放一个对象
  3. 线程第三种方式实现Callable接口;可以获取返回值效率较低

 public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask task = new FutureTask(new Callable() {
            @Override
            public Object call() throws Exception {
                int a=100;
                int b=100;
                return a+b;
            }
        });
        Thread thread = new Thread(task);
        thread.start();
        Object o = task.get();
        System.out.println(o);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值