黑马程序员--线程
来源:互联网 发布:家有大猫 知乎 编辑:程序博客网 时间:2024/05/21 10:57
<a href="http://www.itheima.com" target="blank">android培训</a>
一、进程与线程
进程:正在执行的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。
线程:把进程中的功能分成各个部分,每个部分有一个线程控制。它是进程中的一个独立的控制单元。
多线程:在一个进程中有多个线程执行的方式,就叫做多线程。如在java虚拟机启动的时候会有一个java.exe的执行程序,也就是一个进程。该进程中至少有一个线程负责java程序的执行。而且这个线程运行的代码存在于main方法中。该线程称之为主线程。JVM启动除了执行一个主线程,还有负责垃圾回收机制的线程。
多线程的意义:多线程的出现能让程序产生同时运行效果。可以提高程序执行效率。
当线程运行出现安全问题,,Java对于安全问题提供专业的解决方式,就是同步代码块或者同步函数。
要用到同步的前提应该是:1、必须要有两个或者两个以上的线程。
2、必须是多线程使用同一个锁。
3、必须保证同步中只能有一个线程在运行。
二、创建线程的方式
两种方法:继承Thread类和实现Runnable接口(建议使用,因为java是单继承,多实现,一旦继承,Thread类后就不能继承其他类了)。
创建线程的第一种方式:
1、定义类,继承Thread
2、重写run()方法
3、创建Thread类的子类对象
4、用子类对象,调用Thread类的方法start()方法,开启线程
例子1
class DemoThread extends thread
{
publiv void run()
for(x=0,x<40,x++);
{
System.out.println("yao"+x);
}
}
class DemoThread2
{
public static void main(String[] args)
DemoThread p=new DemoThread();
p.run();
{
public void run
for(x=0,x<40,x++);
{
System.out.println("ming"+x);
}
}
}
例子2
线程的第二种方式:
1、定义类实现Runnable接口
2、覆盖Runable接口中的run方法
3、通过Thread类建立线程对象
4、将Runnable 接口的子类对象作为实际参数传递给Thread类的构造函
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
例2
class Ticket implements Runnable
{
Object obj=new Object();
private int tick=100;
public void run()
{
while(true)
{
synchronized(obj) //下面的语句出现安全问题,就用到同步代码块
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){} //出现异常,用catch处理掉
System.out.println(Thread.currentThread().getName()+".."+tick--);
}
}
}
}
}
class RunnableDemo
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
- 黑马程序员之多线程
- 黑马程序员-----线程复习
- “黑马程序员”~线程例题
- 黑马程序员_线程
- 黑马程序员 线程总结
- 黑马程序员:线程池
- 黑马程序员-线程同步
- 黑马程序员-线程入门
- 黑马程序员----线程
- 黑马程序员-线程
- 黑马程序员-----线程
- 黑马程序员:java线程
- 黑马程序员--线程池
- 黑马程序员--C#线程
- 黑马程序员_线程
- 黑马程序员_线程
- 黑马程序员-----线程
- 黑马程序员---深入线程
- AudioQueue(AudioToolBox)的原理与使用
- 1.将一个有序数组反转
- jQuery学习笔记(二)—— 操作DOM元素
- GCD的基本使用
- 大海教你学手游2015CocosLua第一季_02场景跳转和用户触摸
- 黑马程序员--线程
- iOS开发中使用cocoaPods管理第三方库
- Xcode6快捷键
- 【番外篇】利率二叉树模型对冲
- beyound Compare 在文件上添加右键比较
- Android fragment用法
- 欢迎使用CSDN-markdown编辑器
- ExpandableListView childView点击无响应问题
- Secure Delivery Center快速入门指南(四):添加一个按需软件包