java创建线程
来源:互联网 发布:登陆淘宝显示网络崩溃 编辑:程序博客网 时间:2024/06/12 18:39
线程
线程是隶属于操作系统的概念,是程序执行中的单个顺序流程。
进程是一个执行中的程序,是操作系统对其资源(内存和CPU时间等)进行分配的基本单位,每个进程都有自己独立的一块内存空间、一组系统资源,其内部数据和状态都是完全独立的。
多线程则是指一个进程中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句看上去几乎同时执行。
线程与进程的不同点:同类的多个线程共享一个内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,所以,线程被称为轻负荷运行。
Java产生线程有两种方法:一种是继承Thread类,且覆盖其run方法;另一种是实现Runnable接口,并将实现类对象作为参数传递给Thread类的构造方法。
1.Thread类
public class MyThreadextends Thread {
public static void main(Stringargs[]){
MyThread a = new MyThread();
a.start();
System.out.println("This is main thread");
}
public void run(){
System.out.println("This is another thread");
}
}
MyThread继承了Thread类,并覆盖了run方法。调用start方法之后,当操作系统分配时间片给这个线程后,线程启动。
2.Runnable接口
Runnable接口中的run方法是一个抽象方法,其实现类的run方法中定义的内容就是线程执行时的任务,因而实现类的run方法又称线程体。
注意:run方法无参数,并且返回类型为void。如果一个run方法有返回值或者参数,则不是线程体。
public class MyThreadimplements Runnable {
public static void main(Stringargs[]){
MyThread my = new MyThread();
Thread a = new Thread(my);
a.start();
System.out.println("This is main thread");
}
public void run(){
System.out.println("This is another thread");
}
}
3.两种方法的比较
(1)直接继承线程Thread类:该方法编写简单,可以直接操作线程。由于已经继承Thread,不能再继承其他类了。
(2)实现Runnable接口:当一个类已经继承另一个类时,就只能实现Runnable接口的方式来创建线程。另外,使用此方法的更多原因是多个线程可共享实现类对象的资源。
public class Resourseimplements Runnable {
public int i;
public Resourse(int _i){
i =_i;
}
public void run(){
while(true){
if(i>0){
i--;
System.out.println(Thread.currentThread().getName()+" "+i);
}
else
break;
}
}
}
public class Test {
public static void main(String[]args){
Resourse m =new Resourse(100);
Thread a =new Thread(m);
Thread b =new Thread(m);
a.start();
b.start();
}
}
当Thread-0和Thread-1两个线程并发调用Resourse中的run方法,i就成了共享变量,当一个线程对i在进行自减时,另一个线程也在对i进行自减。
4.Volatile修饰符
当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。而普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。
- Java 线程创建
- java创建线程池
- java创建线程池
- Java创建线程
- 创建Java线程池
- java线程的创建
- java 创建线程
- 创建Java线程池
- 创建java线程池
- Java线程创建方式
- 创建Java线程池
- Java线程创建
- 创建Java线程池
- 创建Java线程池
- JAVA 创建线程池
- Java线程的创建
- Java线程创建方法
- Java - 多线程 - 创建线程
- Kotlin 实现Activity之间的跳转 和 布局控件的简单调用
- java获取json数组格式中的值
- tyvj P1519 博彩游戏
- 按先序打印二叉树叶子结点
- Java基础——LinkedHashSet源码分析
- java创建线程
- 【Memcache】常见问题总结
- 整体浏览查找工程技巧
- resultful风格接口
- java批量裁剪图片
- thinkphp 在两个应用里面设置不同的session
- Semi-prime H-number(poj3292)
- phpcms v9中调用某个栏目页面下的 子栏目里面的 所有文章列表
- 5.18特长生模拟题 Chocolate