多线程基础知识

这篇具有很好参考价值的文章主要介绍了多线程基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

( 1 )  传统使ThreadRunnable实现 

1. Threadrun 

方式 

new Thread(){

@Override

public void run(){

while(true){

try {

Thread.sleep(2000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

}

}.start();

2. 在传ThreadRunnablerun法中代码 

new Thread(new Runnable(){ 

public void run(){

while(true){

try {

Thread.sleep(2000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

System.out.println(Thread.currentThread().getName()); 

}

}

}).start(); 

3.  

Threadrun()的源代以看其实两种方都是Thread对象runThread

类的 run 法没被覆并且 Thread 对象设置了一个 Runnable  run 调用 Runnable 

run 

 /** 

 * If this thread was constructed using a separate

 * <code>Runnable</code> run object, then that
 * <code>Runnable</code> object's <code>run</code> method is called;  * otherwise, this method does nothing and returns.

 * <p> 
 * Subclasses of <code>Thread</code> should override this method.

 * 

 * @see     #start() 

 * @see     #stop() 

 * @see     #Thread(ThreadGroup, Runnable, String) 

 */ 

 @Override 

 public void run() { 

 if (target != null) { 

 target.run();

 } 

( 2 )  定实TimerTimerTask 

Timer 际开应用场景不,一用其他三方但有时在一出现。

下面题来使Timer 

1. 请模面试题) 

要求:使用定时器,4秒执行一次,再间2秒执行一次,以此类推执行。 

class TimerTastCus extends TimerTask{ 

@Override

public void run() {

count = (count +1)%2; 

System.err.println("Boob boom "); 

new Timer().schedule(new TimerTastCus(), 2000+2000*count); 

}

}

Timer  timer = new Timer(); 

timer.schedule(new TimerTastCus(), 2000+2000*count); 

while (true) {

System.out.println(new  Date().getSeconds()); 

try {

Thread.sleep(1000); 

} catch (InterruptedException e) { 

// TODO Auto-generated catch block 

e.printStackTrace(); 

}

}

//PS:下面的代码中count变量中 

//此参数要使用在你匿名内部类中,使final修饰就无法对其值进行修改 

//只能改为静态变量 

private   static volatile int count  = 0; 

( 3 )  线程 

在引入线程于线执行的系统成混乱是在用临资源时线急用一台

机,使织在起,难区分。多个线急用共变量,格,链时,可会导致据处理

因此线同步主要使并发行的线程够有效共享源和使程的执可再现 

当线程发执时,源共享线程作,使线程之间存在下两关系 

1.  间接相制约一个的多个线程必要共系统资,如共享 CPU共享 I/O 备,谓间

互制约源于种资,打印就是好的线A使用印机它线程要等 

2.  直接相制约这种要是因线程间的如有线程 A 将计结果供给线程 B 进一处理,

那么线B在线A据送达前都处于 

间接相制约以称,直接互制可以称为,对互斥以这,线程 A 和线程 B 斥访问某

个资源它们间就顺序问要么线A 等待线B 操作毕,要么线程 B线程作完毕,这其实就

是线程同步。因包括互,互其实特殊的 

下面来体线 

要求线10次后线5。这 

public static void main(String[] args) { 

final Bussiness bussiness = new Bussiness(); 

//子线程 

new Thread(new Runnable() { 

@Override

public void run() { 

for (int i = 0; i < 3; i++) { 

bussiness.subMethod();

}

}

}).start();

//主线程 

for (int i = 0; i < 3; i++) { 

bussiness.mainMethod(); 

}

}

}

class Bussiness {

private boolean subFlag = true; 

public synchronized void mainMethod() { 

while (subFlag) {

try {

wait();

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

for (int i = 0; i < 5; i++) { 

System.out.println(Thread.currentThread().getName() 

+ " : main thread running loop count -- " + i);

try {

Thread.sleep(1000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

subFlag = true;

notify();

}

public synchronized void subMethod() { 

while (!subFlag) {

try {

wait();

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

for (int i = 0; i < 10; i++) { 

System.err.println(Thread.currentThread().getName() 

+ " : sub thread running loop count -- " + i);

try {

Thread.sleep(1000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

subFlag = false;

notify();

}

}

( 4 )  线程ThreadLocal 

l  ThreadLocal 的:线据共序代线程数据线行时 

l  每个线 ThreadLocal 象的 set  set 据当线线ThreadLocalMap然后往这map条记keyThreadLocalvalue是各set方法是每个线ThreadLocalMap对象对象KeyThreadLocal线ThreadLocal.remove()调用也线后也相关ThreadLocal 

l  ThreadLocal 

  订单条流水台几个操作一个事务中成,通常也即同一个线中进行处理,如果累加司应收款的操作失败了则应该把面的操有操使用代码分别 

  银行 减少在同一个务中完成,它们必须使相同的数据库连接对象转入和转出操作的代码分别是两个同的帐 

  Strut2ActionContext不同的线码操每个线线getContext象都个线程管调 getContext 个模 getContext 法,同一个 文章来源地址https://www.toymoban.com/news/detail-471935.html

到了这里,关于多线程基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多线程基础知识点梳理

    进程(process):进程是计算机中的一个任务,比如打开浏览器、IntelliJ IDEA。 线程(thread):线程是进程内部的子任务。比如IDEA在敲代码的同时还能自动保存、自动导包,都是子线程做的。 进程和线程的关系就是一个进程包含一个或多个线程。 线程是操作系统调度的最小任

    2024年02月04日
    浏览(56)
  • java基础之线程知识点

    操作系统(OS)中并发(同时)执行的多个程序任务 宏观并行,微观串行 在一个时间段内,CPU会将时间段划分为若干个时间片,一个时间片是能被一个程序拥有,且只有拥有时间片的程序才能执行自身内容,所以当时间片的划分足够细小,交替频率足够快,就会形成并行的假象,时间上仍然是

    2024年02月01日
    浏览(50)
  • 基础篇:多线程所需知识:

    这里的多线程主要指算法部署时所涉及的多线程内容,对于其他多线程知识需要自行补充 常用组件有thread、mutex、promise、future、condition_variable 启动线程,thread,以及join、joinable、detach、类函数启动为线程 生产者消费者模式 队列溢出的问题,生产太快,消费太慢。如何实现溢

    2024年02月15日
    浏览(46)
  • java并发编程:多线程基础知识介绍

    最初的计算机只能接受一些特定的指令,用户每输入一个指令,计算机就做出一个操作。当用户在思考或者输入时,计算机就在等待。这样效率非常低下,在很多时候,计算机都处在等待状态。 后来有了 批处理操作系统 ,把一系列需要操作的指令写下来,形成一个清单,一次

    2024年02月07日
    浏览(52)
  • 【Java之家-编程的衣柜】线程的基础知识及线程与进程的联系

    线程是什么 一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 “同时” 执行 着多份代码. 轻量级进程 - 线程(Thread) 为什么要有线程 首先,“并发编程”成为“刚需” 其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量

    2024年02月07日
    浏览(53)
  • 【Java】遨游在多线程的知识体系中(基础篇一)

    因为知识比较多,想把文章字数控制在一定范围之内,本文只有先发一篇多线程部分篇幅,之后的知识也会马上赶出来的,有什么有问题的地方经管提出,会虚心接受,并且认真改正。 创建一个子类继承自Thread,重写Thread中的run方法, 这个方法内部就包含了这个线程要执行

    2024年02月01日
    浏览(34)
  • Hive基础知识(十):Hive导入数据的五种方式

    1)语法 (1)load data:表示加载数据 (2)local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表 (3)inpath:表示加载数据的路径 (4)overwrite:表示覆盖表中已有数据,否则表示追加 (5)into table:表示加载到哪张表 (6)student:表示具体的表 (7)partition:表示上传到

    2024年01月18日
    浏览(56)
  • Hive基础知识(十五):Hive中SQL排序方式全解

    Order By:全局排序,只有一个 Reducer 1)使用 ORDER BY 子句排序 ASC(ascend): 升序(默认) DESC(descend): 降序 2)ORDER BY 子句在 SELECT 语句的结尾 3)案例实操 (1)查询员工信息按工资升序排列 (2)查询员工信息按工资降序排列 按照员工薪水的2 倍排序 按照部门和工资升序排

    2024年01月19日
    浏览(55)
  • css基础知识十九:让Chrome支持小于12px 的文字方式有哪些?区别?

    一、背景 Chrome 中文版浏览器会默认设定页面的最小字号是12px,英文版没有限制 原由 Chrome 团队认为汉字小于12px就会增加识别难度 中文版浏览器 与网页语言无关,取决于用户在Chrome的设置里(chrome://settings/languages)把哪种语言设置为默认显示语言 系统级最小字号 浏览器默

    2024年02月15日
    浏览(41)
  • Python爬虫|基础知识点详细汇总(requests、urllib、re、bs4、xpath、PyQuery、jsonpath、多线程、协程、数据保存、selenium)

    1. 请求数据 ① requests (1) 基本使用 参数 对响应内容的操作 (2) Requests进阶:使用Session 为什么要用 Session? Session代表服务器与浏览器的一次会话过程,Session对象存储了特定用户会话所需的信息 例如:一定时间内记录账号密码 (自动登录) 可以加快 requests请求速度 需要客户端登录的

    2023年04月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包