学习笔记 Java_毕向东_创建线程_同步代码块synchronized 2014.8.6
来源:互联网 发布:phpcms域名绑定目录 编辑:程序博客网 时间:2024/06/05 19:46
一、多线程
1、创建线程-继承Thread类
- 创建线程
class Demo extends Thread{private String name;Demo(String name){//this.name = name; super(name); //为什么要用super才能把自己给线程取的名字传进来呢?}public void run(){for(int x = 0; x < 10; x++)System.out.println((Thread.currentThread() == this) + ".." + this.getName() + "demo..." + x); } }class MyThreadDemo{public static void main(String[] args) {Demo d1 = new Demo("Thread-1");Demo d2 = new Demo("Thread-2");d1.start();d2.start();//d2.run();//d1.run();for(int x = 0; x < 10; x++)System.out.println("main..." + x);}}
- 售票程序
class Ticket extends Thread{//private static int tick = 10; //问题:static为什么就解决了呢?但是一般不静态(因为静态生命周期太长)int tick = 10;public void run(){//private static int tick = 10; 这个位置不能加private staticwhile(tick > 0){System.out.println(currentThread().getName() + "tick sale..." + tick--);}}}class MyTicketDemo {public static void main(String[] args) {Ticket t1 = new Ticket();Ticket t2 = new Ticket();t1.start(); //开启一个线程就有100张票t2.start(); //开启一个线程就有100张票}}
2、创建线程-实现Runnable接口
- 售票程序
class Ticket implements Runnable{private int tick = 10;public void run(){while(true){if(tick > 0)System.out.println(Thread.currentThread().getName() + "...tick sale..." + tick--);}}}class MyTicketDemo2 {public static void main(String[] args) {Ticket tick = new Ticket();Thread t1 = new Thread(tick);Thread t2 = new Thread(tick);Thread t3 = new Thread(tick);Thread t4 = new Thread(tick);t1.start();t2.start();t3.start();t4.start();}}
3、多线程的安全问题,同步代码块synchronized
- 售票程序,synchronized
class Ticket implements Runnable{private int tick = 100;Object obj = new Object();public void run(){while(true){synchronized(obj){if(tick > 0){try{Thread.sleep(10);}catch (Exception e){}System.out.println(Thread.currentThread().getName() + "...tick sale..." + tick--);}}}}}class MyTicketDemo2 {public static void main(String[] args) {Ticket tick = new Ticket();Thread t1 = new Thread(tick);Thread t2 = new Thread(tick);Thread t3 = new Thread(tick);Thread t4 = new Thread(tick);t1.start();t2.start();t3.start();t4.start();}}
- 同步的前提:
1,必须要有两个或者两个以上的线程。
2,必须是多个线程使用同一个锁。 - 必须保证同步中只能有一个线程在运行。
- 好处:解决了多线程的安全问题。
- 弊端:多个线程需要判断锁,较为消耗资源
0 0
- 学习笔记 Java_毕向东_创建线程_同步代码块synchronized 2014.8.6
- 学习笔记 Java_毕向东_多线程_同步函数 2014.8.7
- 学习笔记 Java_毕向东_面向对象 2014.8.1
- 学习笔记 Java_毕向东_面向对象_静态_异常 2014.8.2
- 学习笔记_毕向东 Java_继承_抽象类_接口_多态 2014.7.13
- 学习笔记_毕向东 Java_多态 2014.7.14
- 学习笔记_毕向东 Java_多线程 2014.7.16
- 学习笔记_毕向东 Java_内部类_异常_多线程 2014.7.15
- 学习笔记 Java_毕向东_流程控制语句_函数_数组 2014.7.30
- 学习笔记 Java_毕向东_语言基础_程序流程控制 2014.7.29
- 学习笔记 Java_毕向东_数组_面向对象 2014.7.31
- 学习笔记_毕向东 Java_集合框架_LinkedList 2014.7.22
- 学习笔记 Java_毕向东_Java概述_语言基础 2014.7.28
- 学习笔记 Java_毕向东_Jar包 2014.8.10
- 多线程_同步代码块的方式解决线程安全问题
- 多线程_同步代码块解决线程安全问题的解释
- Java_多线程_创建及启动线程
- 黑马程序员_毕向东_Java基础_DAY01学习笔记
- 设置MyEclipse中.jsp .xml样式
- mount -t vboxsf Desktop /home/h/Desktop/windesktop 写到/etc/rc.d/rc.local里.
- UVA-120- Stacks of Flapjacks
- SGU194 Reactor Cooling 有下界最大流
- 黑马程序员 - 学习笔记8 接口的初步了解
- 学习笔记 Java_毕向东_创建线程_同步代码块synchronized 2014.8.6
- 深入理解Linux进程间通信(IPC)-- FIFO
- lda(linear discriminant analysis)线性判别分析算法代码
- 数据挖掘算法源代码:很好的参考资料
- 神交流:纯表情社交应用,能摆到桌面?
- HDU 4907 Task schedule(BestCoder Round #3 )
- Apache ab工具Nginx压力测试
- 树状数组----吼吼~~~~~
- 深入理解Linux进程间通信(IPC)-- 信号signal