java初级笔记_多线程

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------



1:多线程
(1)如果一个应用程序有多条执行路径,则被称为多线程程序。
进程:正在执行的程序。
线程:程序的执行路径,执行单元。
单线程:如果一个应用程序只有一条执行路径,则被称为单线程程序。
多线程:如果一个应用程序有多条执行路径,则被称为多线程程序。


举例:迅雷下载,360的管理界面。


单进程单线程:一个人点一桌菜
单进程多线程:多个人点一桌菜
多进程多线程:多个人点多桌菜
(2)多线程程序实现的两种方案:
A:继承Thread类
a:自定义类MyThread继承Thread类。
b:重写run方法(),在这里面输出1-100的数据。
c:创建测试类MyThreadTest,在测试类中创建MyThread类的多个对象。
d:调用start()


代码体现:
public class MyThread extends Thread {


public MyThread(){}


public MyThread(String name) {
super(name);
}


public void run() {
for(int x=1; x<=100; x++) {
System.out.println(getName()+"---"+x);
}
}
}


public class MyThreadTest {
public static void main(String[] args) {
MyThread my1 = new MyThread("三国志");
MyThread my2 = new MyThread("三国杀");


//my1.setName("三国志");
//my2.setName("三国杀");


my1.start();
my2.start();
}
}


B:实现Runnable接口
a:自定义类MyRunnable实现Runnable接口。
b:重写run方法(),在这里面输出1-100的数据。
c:创建测试类MyThreadTest,在测试类中创建MyRunnable类的一个对象。
d:在测试类创建Thread类的多个对象,并把MyRunnable类的一个对象作为构造参数传递。
e:调用start()


代码体现:
public class MyRunnable implements Runnable {
public void run() {
for(int x=1; x<=100; x++) {
System.out.println(Thread.currentThread().getName()+"---"+x);
}
}
}

public class MyRunnableTest {
public static void main(String[] args) {
MyRunnable my = new MyRunnable();


Thread t1 = new Thread(my,"斗地主");
Thread t2 = new Thread(my,"三国群英传2");


t1.start();
t2.start();
}
}


(3)思考:
A:如何启动一个线程
B:start()和run()方法的区别
C:线程随机性原理
D:线程的生命周期
E:线程的安全问题是怎么产生的,以及是如何解决的?
F:同步解决线程安全问题的方式有几种?
G:同步代码块的锁对象是谁?同步方法的锁对象是谁?
F:静态方法的锁对象是谁?
(4)几个方法
优先级(priority)
暂停(yield)
加入(join)
守护线程
线程睡眠(sleep)
线程中断(interrupt)
(5)案例:
卖票案例。


线程安全问题:
怎么产生的:
A:多线程环境
B:有共享数据
C:多条语句操作共享数据


怎么解决:
把C步骤给锁起来。


两种方案:
a:同步代码块
synchronized(锁对象) {
一个原子性操作
}
b:同步方法
把synchronized添加到方法声明上。返回值前。

2:线程
(1)死锁
同步中,多个线程使用多把锁之间存在等待的现象。
(2)JDK5的新特性:Lock锁
它把什么时候获取锁,什么时候释放锁的时间给明确了。
(3)线程间的通信
不同种类的线程针对同一个资源的操作。生产者线程生产与消费者线程消费,操作同一数据。
(4)等待唤醒机制
Object类的wait方法与notify方法。将所在线程进行等待唤醒操作。
可完成生产消费交替执行。


(5)最简单的线程程序代码:
new Thread() {
public void run() {
for(int x=0; x<100; x++) {
System.out.println(x);
}
}
}.start();


new Thread(new Runnable(){
public void run() {
for(int x=0; x<100; x++) {
System.out.println(x);
}
}
}).start();


3:单例设计模式
(1)保证类在内存中只有一个对象。
(2)怎么保证:
A:构造私有
B:自己造一个对象
C:提供公共访问方式
(3)两种方式:
A:懒汉式(面试)
public class Student {
private Student(){}


private static Student s = null;


public synchronized static Student getStudent() {
if(s == null) {
s = new Student();
}
return s;
}
}




B:饿汉式(开发)
public class Student {
private Student(){}


private static Student s = new Student();


public static Student getStudent() {
return s;
}
}
(4)JDK的一个类本身也是单例模式的。
Runtime


------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值