当前位置: 首页 > news >正文

新版织梦腾讯3366小游戏门户网站模板源码网站建设赚钱吗

新版织梦腾讯3366小游戏门户网站模板源码,网站建设赚钱吗,wordpress微信没缩略图,虚拟主机销售网站模板多线程 一.创建线程1.多线程创建方式一(Thread)2.多线程创键方式二(Runnable)3.线程创建方式三 二.线程安全问题解决办法1.使用同步代码块synchornized 2 .使用Lock解决线程安全问题 三.总结 线程就是程序内部的一条执行流程 一.创建线程 常用的方法 Thread.currentThread()… 多线程 一.创建线程1.多线程创建方式一(Thread)2.多线程创键方式二(Runnable)3.线程创建方式三 二.线程安全问题解决办法1.使用同步代码块synchornized 2 .使用Lock解决线程安全问题 三.总结 线程就是程序内部的一条执行流程 一.创建线程 常用的方法 Thread.currentThread(): 获取当前线程Thread.getName(): 获取当前线程的名称Thread.setName(): 设置当前线程的名称Thread.yield(): 礼让当前正在执行的线程Thread.sleep(long millis): 让当前线程暂停millis毫秒Thread.interrupt(): 中断当前线程Thread.isInterrupted(): 判断当前线程是否被中断Thread.currentThread().interrupt(): 中断当前线程Thread.join(): 插队,调用这个方法的线程先执行完毕Thread.sleep()睡眠 1.多线程创建方式一(Thread) 定义一个子类MyThread继承Thread,重写run方法创建Mythread类的对象通过对象调用start方法启动线程,线程开启后,会自动调用线程对象的run方法执行JVM会自动开启一个线程,执行main方法,称为主线程主线程中开启了其他线程称为子线程开启了子线程后,子线程会跟我们的主线程争抢资源,谁抢到了谁就先执行,执行一小会用释放,再重新抢占资源 优点: 创建线程简单 缺点: 扩展性不强,不能返回线程执行结果 2.多线程创键方式二(Runnable) 定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法创建MyRunnable任务对象把MyRunnable对象交给Thread处理调用start()方法启动线程 优点 线程任务与线程对象分离,可以让同一线程执行不同的任务 缺点 需要多一个Runnable对象 不能返回线程结果 3.线程创建方式三 实现callable返回值类型接口,重写call方法callable接口在实现的时候需要指定泛型,用来确定返回值的数据类型创建FutureTask对象,构造方法中需要传入callable接口实现类对象FutureTask()中提供了一个get(),它是一个阻塞的方法,他会阻塞线程一直从Futurue对象中去获取返回的结果,如果没有获取到会一致阻塞等待创建Thread对象,构造方法中传入futureTask对象调用start()方法启动线程调用get()方法的时候会有异常(最好分开进行try… catch异常捕获,因为当有一条线程出现异常的时候,不会影响到其他线程的返回结果,) package com.dream.Thread;import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;public class ThreadDemo03 {public static void main(String[] args) {//1.线程创建的方式三: 实现callable接口,重写call方法//callable接口在实现的时候需要指定泛型,用来确定返回值的数据类型//2.创建callable接口实现类的对象MyThread3 myThread3 new MyThread3(100);//3.创建FutureTask对象,构造方法中需要传入callable接口实现类对象FutureTaskString futureTask new FutureTask(myThread3);//futureTask对象是线程任务对象,他的get方法可以在线程运行结束后,获取线程执行结果//4.创建Thread对象,构造方法中传入futureTask对象Thread t new Thread(futureTask);//5.启动线程t.start();MyThread3 myThread3_2 new MyThread3(200);FutureTaskString futureTask_2 new FutureTask(myThread3_2);Thread t2 new Thread(futureTask_2);t2.start();//6.获取线程执行结果(最好分开进行try... catch异常捕获,因为当有一条线程出现异常的时候,不会影响到其他线程的返回结果,)try {String result futureTask.get();System.out.println(result);} catch (Exception e) {e.printStackTrace();}try {String result_2 futureTask_2.get();System.out.println(result_2);} catch (Exception e) {e.printStackTrace();}} }class MyThread3 implements CallableString {private int n;public MyThread3(int n) {this.n n;}Overridepublic String call() throws Exception {//计算1-n的和返回int sum 0;for (int i 1; i n; i) {sum i;}return 1- n 的和为 sum;} }二.线程安全问题 存在多个线程在同时执行同时访问一个共享资源同时对共享资源做操作 比如两个人访问同一个银行账户,就会出现线程安全问题 package com.dream.threadsafe;public class MyRunnable implements Runnable {private Account account new Account();Overridepublic void run() {if (account.getBalance() 100000) {account.withdraw(account, 100000);} else {System.out.println(余额不足取款失败);}} }/*** 模拟取款*/class Account {private int balance 100000;// 余额public int getBalance() {return balance;}public void withdraw(Account acc, int amount) {System.out.println(Thread.currentThread().getName() 正在取款 amount);balance - amount;System.out.println(Thread.currentThread().getName() 取款成功余额为 balance);} } 启动线程 public class Test {public static void main(String[] args) {MyRunnable mr new MyRunnable();Thread t1 new Thread(mr, 小明);Thread t2 new Thread(mr, 小红);t1.start();t2.start();} }解决办法 1.使用同步代码块synchornized 同步锁:我们传入的参数要是唯一的对象,但是不要直接使用字符串作为锁对象,因为会导致其它无关线程不能同步线程如果同步锁对象是在实例方法内部,那么锁对象就是this每次抢占到资源都会判断当前锁是否是开启的,开启了就进入执行,关闭则等待如果同步锁对象是在静态方法内部,那么锁对象就是 类名.class也可以直接加在方法的修饰符后面,构成同步方法 2 .使用Lock解决线程安全问题 Lock是一个接口,需要创建它的实现类对象ReentranLock()是Lock接口的实现类相较于synchronized锁,Lock会更加的灵活他俩都属于重量级锁 private final Lock lk new ReentrantLock(); public void withdraw(Account acc, double money) {lk.lock();//上锁try {if (this.money money) {//余额足够,取款System.out.println(Thread.currentThread().getName() 取款成功);//更新余额this.money - money; //System.out.println(acc.getCardId() 余额为: this.money);} else {System.out.println(余额不足);System.out.println(Thread.currentThread().getName() 取款失败);}} finally {lk.unlock();//解锁}}三.总结 本章主要讲解了线程几种线程的创建方式,线程安全问题出现的场景,以及线程安全的解决方式
http://www.dnsts.com.cn/news/123930.html

相关文章:

  • 石材石料网站搭建教程网络科技公司网站源码
  • 用app怎么样建网站做网站的人叫什么
  • 网站建设介绍大全个人网络销售平台
  • 废橡胶网站建设wordpress怎么置顶文章
  • 国外互联网科技网站2021年中国十大电商平台排名
  • 网站logo是什么重大军事新闻最新消息
  • 酒泉网站建设优化哪些网站可以做图片链接
  • 旅游建设投资公司中网站云主机 做网站
  • 网站外网访问怎么做路由器端口映射国外好用的免费服务器
  • 在线设计 网站源码广元做开锁网站
  • jeecms做企业网站零基础做网站教程
  • 网络公司做的网站根目录在哪asp商业网站源码
  • 企业网站有哪些类型郴州新网手机版
  • 全国最大的网站建设公司排名西安市城市建设管理局网站
  • 个人做电影网站合法吗贵州建设职业技术学院报名网站
  • 怒江网站制作成都网站推广哪家专业
  • 网站常见的风格建设官方网站需要注意什么
  • 购物网站哪个最好美容类网站模版
  • 大鹏新区住房建设局网站网站制作价格行情
  • 做公众号封面图的网站怎样推广app别人才愿意下载
  • 吉林省高等级公路建设局 网站国内好看的网页设计
  • 怎么查看网站收录wordpress 名站
  • 官方网站 建设情况汇报长沙制作网站公司哪家好
  • 做电脑系统哪个网站微信答题小程序
  • 新网站备案国家和城乡建设部网站
  • 哈尔滨的建设信息网站自己的网站怎么样推广优化
  • asp网站开发的开发环境手游传奇发布网站
  • 国家工商网查询企业信息徐州手机网站优化公司
  • 微信人生里面微网站怎么做wordpress the7 主题
  • 物流网站 源码介休网站建设