新兵日记--java多线程学习(一)  --如何创建线程

  java 多线程的实现方法

  可以通过继承Thread类和实现Runnable接口来实现,而Thread类实际上实现了Runnable接口 ,两种创建线程的方法性质是一样的,并没有什么本质区别

  Thread类

   1.  创建MyThread 类并继承Thread类

   public class MyThread extends Thread{}

  

   2.  在MyThread类中重写 Thread类的run()方法,值得一提的是Thread类的run()方法是实现了Runnable接口,所以继承Thread类和实现Runnable并没有本质区别

1 public class MyThread extends Thread{
2             public void run(){
3                  //线程的执行代码
4             }
5 }

   

  3.   创建MyThread 类的实例并调用Thread类的start()方法

   

1 public static void main(String[] args ){
2     MyThread myTh=new MyThread();
3     myTh.start();//调用Thread类的start()方法
4 }

    为什么不是myTh.run()而是 myTh.start()  ? 

  因为在myTh.run()是由main主线程来执行myTh.run()方法。myTh.start()是由自己创建的线程执行

  myTh.run() 直接由main()主线程执行run方法,依旧是单线程。

  myTh.start() 告诉“线程规划器”该线程已经准备好了,等你来cpu来调用该线程对象的 run方法,使线程得到启动是,是异步执行。

  

原文地址:https://www.cnblogs.com/xiejianan/p/11332005.html

时间: 2024-11-01 18:14:21

新兵日记--java多线程学习(一)  --如何创建线程的相关文章

java多线程学习(二)——线程的创建

一.java创建线程的两个方法 1.从java.lang.Thread类派生出一个新的线程类,重载它的run()方法 2.实现Runnable接口,重载Runnable接口中的run()方法. 使用Thread类来创建线程和创建普通类的对象的操作是一样的,线程是Thread类或者其子类的实例对象. 二.java提供的两种创建线程的区别 java中类是单继承的,当定义一个新的线程类的时候,它只能扩展一个外部类,那么当创建的线程是继承自Thread类来实现的,那么此线程类无法再扩展其他类,无法实现复

Java多线程学习(八)线程池与Executor 框架

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 目录: [TOC] 本节思维导图: 思维导图源文件+思维导图软件关注微信公众号:"Java面试通关手册" 回复关键字:"Java多线程"

java多线程学习(三)——线程栈

一.线程栈模型 线程栈模型是理解线程调度原理以及线程执行过程的基础.线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶,线程栈的内容是随着线程的运行状态变化而变化的,研究线程栈必须选择一个运行的时刻(指代码运行到什么地方) 上图中的栈A是主线程main的运行栈信息,当执行new JavaThreadDemo().threadMethod();方法时,threadMethod方法位于主线程栈中的栈顶,在threadMethod方法中运行的start()方法新建立了一个线程,此时,

多线程学习一:创建线程

1 #include <iostream> 2 #include <thread> //① 3 void hello() //② 4 { 5 std::cout << "Hello Concurrent World\n"; 6 } 7 int main() 8 { 9 std::thread t(hello); //③ 10 t.join(); //④ 11 } 程序代码如上: 增加了 #include <thread> ①,标准C++库

JAVA多线程学习笔记&lt;3&gt; 停止线程

在这里要注意interrupt()方法,在线程正常运行的时候,调用 interrupt() 并不能结束线程. 正确的结束线程的姿势如下: <span style="white-space:pre"> </span>public volatile boolean stop = false; //volatile : every time use this variable ,system will check this value private int i =0

java多线程学习-多个线程访问对象共享数据的方式

public class MulitThreadShareData { public static void main(String[] args) { final ShareData1 data1 = new ShareData1(); new Thread(new Runnable() { public void run() { data1.increment(); } }).start(); new Thread(new Runnable() { public void run() { d

java多线程学习(2)

1)Callable和Future Runnable封装一个异步运行的任务:可以当成一个没有任何参数和返回值的异步方法,Callable和 Runnable类似,但是它有返回值和参数. Callable接口是一个参数化的类型,只有一个方法call. 1 public interface Callable<V> 2 3 { 4 5 V call()throws Exception; 6 7 } 类型参数v是指返回值的类型,例如Callable<Integer>代表最终返回一个Inte

java多线程学习(1)

1)多线程与多进程的区别 多线程和多进程有什么区别呢?本质的区别在于每个进程有它自己的变量的完备集,线程则共享相同的数据. 对程序来说,共享的变量会使得线程之间的通信比进程间的通信更加有效和简单:同时,线程相对于进程来说,更加的“轻量级”, 线程的创建和销毁要比 进程的 开销要小的多. 2)多线程程序的构造 多线程的构造通常有两种方法, 第一种方法是,构建一个Thread的子类,并重写它的run()方法: 1 class MyThread extends Thread 2 { 3 4 publi

Java多线程(三)、线程同步(转)

Java多线程(三).线程同步 分类: javaSE综合知识点 2012-09-18 17:59 2400人阅读 评论(0) 收藏 举报 在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系.可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题.现在就来学习多线程对数据访问的控制吧. 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数