“java多线程的实现——几乎都要和java.lang.Thread打交道”

方式一:继承于Thread类

1、创建一个继承于Thread类的子类

2、重写Thread类的run()

3、创建Thread类的子类对象

4、通过此对象调用start():1启动当前线程 2调用当前线程的run()

例子:遍历100以内的所有偶数
class MyThread extends Thread{  //继承Thread类
//重写run方法
@Override
public void run() {
for(int i=0;i<100;i++)
{
if(i%2==0)
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
} public class ThreadTest {
public static void main(String[] args) {
//方式一
MyThread t1=new MyThread();
t1.start(); //start():1启动一个线程 2执行run() for(int i=0;i<100;i++) //主线程
if(i%2==1)
System.out.println(Thread.currentThread().getName()+":"+i); // //方式二
// MyRunnable r1=new MyRunnable();
// new Thread(r1).start();
}
}

ps:

如果main中直接调用t1.run,并不会有新线程,仍然是main的原线程调用了run方法而已

如果线程已经start,不能再进行start(可从代码中发现会报异常)

Thread类中的常用方法

  • 构造器可以设置线程名
  • start():启动当前线程;调用当前线程的run()
  • run(): 线程所做的事务,实现多线程通常重写此方法
  • Thread.currentThread():静态方法,返回执行当前代码的线程对象
  • setName():设置线程名
  • getName():返回线程名
  • yield():释放当前执行线程对cpu的执行权(但下次cpu调度仍然可能是ta)
  • join():在线程a中调用线程b的join(),此时a进入阻塞直到b执行完后才唤醒a
  • Thread.sleep(m):当前执行进程进入睡眠m毫秒

    (当前线程进入阻塞态并释放cpu,但不会释放锁,所以一段时间内会无任何线程运行。睡眠结束后被阻塞的进程进入就绪状态——也就是仍然要与其他线程抢夺cpu)
  • isLive():判断线程是否仍然存活

Thread类中的优先级

  • MAX_PRIORITY:10

    MIN_PRIORITY:1

    NORM_PRIORITY:5 -->默认优先级
  • 如何获取和设置当前线程的优先级:

    getPriority():获取线程的优先级

    setPriority():设置线程的优先级

    -PS:高优先级的线程只是更大概率抢占低优先级线程的cpu执行权,不一定百分百。







方式二:创捷一个实现Runnable接口的类并创建其对象

该对象传入Thread的构造器当中

这里可以理解成实现一个Runnable事务类,并创建事务对象传入不同线程对象(同一事务不同线程)

1、创建一个实现了Runnable接口的类

2、实现类去实现Runnable中的抽象方法:run()

3、创建实现类的对象

4、将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象

5、通过Thread类的对象调用start()

      MyRunnable r1=new MyRunnable();
new Thread(r1).start();



案例实现:创建三个窗口卖票,总票数为100张

  1. 使用Thread方式(需要在MyThread类中设置静态变量来表示票数)
  2. 实现Runnable接口的实现类(只有一个实现类的对象,在对象中设置表示票数的变量即可)



开发中更适合用实现接口(第二种方式),没有单继承局限性同时也更适合共享数据的情况

传统多线程实现方式为两种,但最新jdk支持另外两种方式

守护线程和用户线程

Java多线程——实现的更多相关文章

  1. 40个Java多线程问题总结

    前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...

  2. Java多线程基础知识篇

    这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...

  3. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  4. Java多线程系列--“JUC锁”04之 公平锁(二)

    概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...

  5. Java多线程--让主线程等待子线程执行完毕

    使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...

  6. Java多线程 2 线程的生命周期和状态控制

    一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...

  7. java 多线程 1 线程 进程

    Java多线程(一).多线程的基本概念和使用 2012-09-10 16:06 5108人阅读 评论(0) 收藏 举报  分类: javaSE综合知识点(14)  版权声明:本文为博主原创文章,未经博 ...

  8. 一起阅读《Java多线程编程核心技术》

    目录 第一章 Java多线程技能 (待续...)

  9. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

  10. java从基础知识(十)java多线程(下)

    首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...

随机推荐

  1. Mybatis Plus使用租户过滤无效解决方案

    异常内容: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Pe ...

  2. C++ - main()和_tmain(int argc, _TCHAR* argv[]) 的详细区别

    一些程序中会发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream>而是<stdafx.h>. 首先,这个_tmain()是为了支 ...

  3. C与C++的区别之函数调用堆栈

    函数调用栈 1.函数参数带入(入调用方函数的栈,从右向左入栈) int fun(int a); int fun(int a, int b); int fun(int a, int b, int c); ...

  4. 【转载】10个Web3D可视化精彩案例

    1.化学元素周期表 六种排列方式,炫酷动画效果,TWaver 3D轻松实现. 演示地址:http://demo.servasoft.com/che... 2.DNA螺旋图 DNA3D模型,包含几千个球 ...

  5. HTML5 localStorage使用方法及注意点

    html5新增了在客户端存储数据的新方法:1.localStorage - 没有时间限制的数据存储:2.sessionStorage - 针对一个session的数据存储,当用户关闭浏览器窗口后,数据 ...

  6. 网络安全—xss

    1.xss的攻击原理 需要了解 Http cookie ajax,Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码.比如 ...

  7. 前端面试题整理——Javascript基础

    常见值类型: let a; //undefined let s = 'abc'; let n = 100; let b = true; let sb = Symbol('s'); let nn = N ...

  8. 一个chome的广告拦截小插件

    先附上下载地址:https://chromecj.com/productivity/2015-03/391.html 可以屏蔽绝大多数广告啊,浏览器用起来神清气爽! 下载完成后有一个名字为这个的文件, ...

  9. Python Turtle库绘制蟒蛇

    使用Python Turtle库来绘制蟒蛇 import turtle引入了海龟绘图体系 使用setup函数,设定了一个宽650像素和高350像素的窗体,其位置左上角坐标是200,200 说明位置在距 ...

  10. uni-app 解析后台接口返回的HTML

    正常使用rich-text是可以解决问题的,但是在支付宝小程序中不显示,在文档中看到" 支付宝小程序 nodes 属性只支持使用 Array 类型.如果需要支持 HTML String,则需 ...