学习Java的多线程笔记

线程与进程

进程
        是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间
线程
        是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程 最少有一个线程
        线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程
同步与异步
同步 : 排队执行 , 效率低但是安全
异步 : 同时执行 , 效率高但是数据不安全
并发与并行
并发 :指两个或多个事件在 同一个时间段内 发生。
并行 :指两个或多个事件在 同一时刻 发生(同时发生)
多线程技术
Java提供的用于实现线程的类:Thread 
继承Thread实现线程(抢占式运行),在创建Thread对象后需要重写   run();方法(线程要执行的任务方法,此方法不能被直接调用,通过Thread对象的start();方法来启动任务。
实现Runnable接口
同样重写run();方法
Runnable更适合多个线程同时执行相同的任务的情况,避免了单继承的局限性。
守护线程:SetDaemon(true);
线程同步(解决线程不安全)
1.同步代码块
格式:synchronized(锁对象){ }
2.同步方法
在run();方法里面添加单独的方法,方法用synchronized修饰
3.显示锁
如:
Lock lock = new reentrantlock();
lock.lock();//锁
lock.unlock();//解锁
先来先到是公平锁,大家一块抢是非公平锁。
显示锁:fair参数为true就表示为公平锁
如:Lock lock = new Reentrantlock(true);
线程6种状态:
new:线程刚创建未启动
Runnble:正在执行
Blocked:排队状态
Waiting:无限等待状态
Timedwaitiiong:指定时间等待状态
Trminated:结束或退出线程
线程池:
缓存线程池:newCachedThreadPool();
定长线程池:newFixedThreadPool();括号里面传固定长度
单线程线程池:newSingleThreadExecutor();
周期定长线程池:
1.
ScheduleExecutorService s = Executors.newSsheduledThreadPool(传入固定值 如:2)
Service.schedule(new Runnable(){ },时间值秒如:5,Timeunit.SECONDS);
2.
周期性执行任务:
参数1:任务
参数2:延迟时长数字(第一次执行在什么时间以后)
参数3:周期时长数字(每隔多久执行一次)
参数4:时长数字的单位
方法ScheduleSAtFixedRate(new Runnable () { },5,1,Timunit.SECONDS);
Lambda表达式,函数式编程思想
如:
Thread t = new Thread(() -> System,out,println("史蒂夫"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值