首页 / JAVA / 学习Java的第11天
学习Java的第11天
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了学习Java的第11天,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2352字,纯文字阅读大概需要4分钟。
内容图文
![学习Java的第11天](/upload/InfoBanner/zyjiaocheng/637/26f5b2d36fe146d3a9eaa028a699a259.jpg)
学习Java的第11天
-
Thread构造器
- Thread():创建新的Thread对象
- Thread(String threadname):创建线程并指定线程实例名
- Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接 口中的run方法
- Thread(Runnable target, String name):创建新的Thread对象
-
线程的生命周期
-
新建 就绪 运行 死亡 运行可能遭遇阻塞 阻塞之后继续就绪
之后再次执行 运行结束后 死亡
-
-
线程的同步:
-
Why:多个线程的执行引起执行结果的不稳定(具体情况是一个线程遭遇阻塞这时其他线程的进入会导致共享数据的操作错误)
-
how:Synchronized (同步机制)
-
同步代码块: synchronized (对象(监视器)){ // 需要被同步的代码; }
-
同步监视器:俗称:锁 要求:多个线程必须使用同一把锁。
-
在实现类创建多线程当中可以考虑用this。
-
在继承类创建多线程用当前类作为锁
- 格式:当前类名.class
-
synchronized还可以放在方法声明中,表示整个方法为同步方法。 例如: public synchronized void show (String name){ …. }
//回忆一下实现类的方法创建线程 class MyThread implements Runnable { private int ticket = 10000; //多线程真的很恶心 居然运行结果不一样 出不了其它线程买票 //后来改到10000出现了 应该是我cpu太强了吧 //实现接口 重写方法 @Override public void run() { while (true) { synchronized (SellTicket.class) { if (ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "票号:" + ticket); ticket--; }else break; } } } } public class SellTicket { public static void main(String[] args) { MyThread s1 = new MyThread(); //将实现接口类的对象当作Thread构造器的参数 Thread t1 = new Thread(s1); Thread t2 = new Thread(s1); Thread t3 = new Thread(s1); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t2.start(); t1.start(); t3.start(); } }
-
-
-
关于同步方法:
-
同步方法仍然涉及到同步监视器 只是不需要我们显示的声明
-
非静态的同步方法,同步监视器是this
-
静态同步方法是当前类本身
class MyThread2 implements Runnable { private static int ticket = 10000; @Override public void run() { while (true){ show(); } } public synchronized static void show() { if (ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "票号:" + ticket); ticket--; } } } public class SynMethod { public static void main(String[] args) { MyThread2 m1 = new MyThread2(); Thread t1 = new Thread(m1); Thread t2 = new Thread(m1); Thread t3 = new Thread(m1); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t2.start(); t1.start(); t3.start(); } }
-
内容总结
以上是互联网集市为您收集整理的学习Java的第11天全部内容,希望文章能够帮你解决学习Java的第11天所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。