Java并发学习之一——线程的创建

与每个java语言中的元素一样,线程是对象。在Java中,我们有两种方式创建线程:

1、通过直接继承thread类,然后覆盖run方法。

2、构建一个实现Runnable接口的类,然后创建一个thread类对象并传递Runnable对象作为构造参数

代码如下:

public class Calculator implements Runnable{  private int number;  public Calculator(int number){  this.number = number;  }  /** * run()方法是创建的线程执行指令 */  @Override  public void run() {  for (int i = 1; i < 10; i++) {  System.out.printf("%s:%d*%d=%d\n",Thread.currentThread().getName(),number,i,i*number);  }  }  public static void main(String[] args) {  for (int i = 1; i < 10; i++) {  Calculator cal = new Calculator(i);  Thread thread = new Thread(cal);  thread.start();  }  }  
}  

3、每个Java程序最少有一个执行线程。当你运行程序的时候,JVM运行负责调用main()方法的执行线程。当调用Thread对象的start()方法时,我们创建了另一个执行线程。在这些start()方法调用之后,我们的程序就有了多个执行线程。当全部的线程执行结束时(更具体点,所有非守护线程结束时),Java程序就结束了。如果初始线程(执行main()方法的主线程)运行结束,其他的线程还是会继续执行直到执行完成。但是如果某个线程调用System.exit()指示终结程序,那么全部的线程都会结束执行。创建一个Thread类的对象不会创建新的执行线程。同样,调用实现Runnable接口的run()方法也不会创建一个新的执行线程。只有调用start()方法才能创建一个新的执行线程。

4.特殊建立一个线程代码如下(常用)

package aliPay;import org.omg.CORBA.PRIVATE_MEMBER;public class troduationalThread {public static void main(String[] args) {// TODO Auto-generated method stubfinal Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubfor (int i = 0; i < 50; i++) {business.sub(i);                            }}}).start();for (int i = 0; i < 50; i++) {business.sub(i);            business.main(i);}}}class Business{private boolean isShouldSub = true;public synchronized void sub(int i) { while (!isShouldSub) {try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}for(int j=1;j<=10;j++){System.out.println("Sub Thread sequence of"+j+"loop of"+i);}isShouldSub = false;this.notify();}public synchronized void main(int i){while (isShouldSub) {try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}for(int j=1;j<=10;j++){System.out.println("Main Thread sequence of"+j+"loop of"+i);}isShouldSub = true;this.notify();}}

 

转载于:https://www.cnblogs.com/pypua/articles/7233929.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day1||python

测试题&#xff1a; 0. Python 是什么类型的语言&#xff1f; Python是一种面向对象、解释型、动态类型计算机程序设计语言解释型&#xff1a;程序无需编译成二进制代码&#xff0c;而是在执行时对语句一条一条编译动态类型&#xff1a;在程序执行过程中&#xff0c;可以改变变…

2.7万字还原行业面貌,《2019 AI金融风控行业研究报告》正式上线!...

在金融科技领域&#xff0c;风险控制的重要性&#xff0c;从其关联的金融业务和结合的技术维度可见一斑&#xff1a;风控涉及信用借贷、保险、支付、供应链金融等场景&#xff0c;并运用了包括生物特征识别、机器学习、自然语言处理、大数据、云计算等多项技术。 区别于美国有…

【原创】QT简单计算器

代码 //main.cpp#include "calculator_111.h" #include <QtWidgets/QApplication>int main(int argc, char *argv[]) { QApplication a(argc, argv); Calculator_111 w; w.show(); return a.exec(); /* //QT creator Calculator_111 win; win.show(); return…

cs堡垒机使用说明

一、堡垒机介绍 为了保证机房的网络安全&#xff0c;IDC内所有服务器不被允许从办公网直接ssh登录&#xff0c;必须通过跳板机进行间接登录。用户通过跳板机执行的所有命令&#xff08;包括通过跳板机登录的其他机器后的命令&#xff09;都会被保存并审计。 cs是我们登录IDC服…

export和export default的区别

es6中export和export default的区别 export与export default均可用于导出常量、函数、文件、模块&#xff1b;你可以在其它文件或模块中通过import(常量 | 函数 | 文件 | 模块)名的方式&#xff0c;将其导入&#xff0c;以便能够对其进行使用&#xff1b;在一个文件或模块中&am…

koa中间件机制详解

转自&#xff1a;https://cnodejs.org/topic/58fd8ec7523b9d0956dad945 koa是由express原班人马打造的一个更小、更富有表现力、更健壮的web框架。 在我眼中&#xff0c;koa的确是比express轻量的多&#xff0c;koa给我的感觉更像是一个中间件框架&#xff0c;koa只是一个基础的…

极度推荐的文章和网站

推荐文章---收录中 因为是及时雨,这里就给他放在开头啦&#xff1a;http://www.cnblogs.com/zhuzhenwei918/p/7241971.html webpack3.0配置指南&#xff1a;http://www.cnblogs.com/caideyipi/articles/7080010.html 超酷的伪元素网站&#xff1a;https://tympanus.net/Develop…

倍道而行:选择排序

一、为什么学了之后过段时间又会忘记了&#xff1f; 因为没有去运用它和认为面试需要而没有真正的重视。现在给它赋予意义&#xff1a;1.那就是基础牢固&#xff0c;才可触类旁通2.真正记得和随时可以拿出手&#xff0c;那么面试可以PK掉一大批人。不然看到一个精妙的算法就学一…

如何构建一个真实的推荐系统?

AI 前线导读&#xff1a;随着互联网行业的井喷式发展&#xff0c;数据规模呈现爆炸式增长。大数据中蕴含了巨大的价值&#xff0c;但同时也来了很 “信息过载” 的问题。推荐系统作为一个广泛应用的信息过滤系统&#xff0c;在很多领域取得了巨大的成功。在电子商务上&#xff…

volatile的适用场景

介绍 把代码块声明为 synchronized&#xff0c;有两个重要后果&#xff0c;通常是指该代码具有 原子性&#xff08;atomicity&#xff09;和 可见性&#xff08;visibility&#xff09;。 原子性意味着个时刻&#xff0c;只有一个线程能够执行一段代码&#xff0c;这段代码通过…

link和@import的区别

1、link属于HTML标签&#xff0c;import是css提供的 2、link是HTML标签&#xff0c;没有兼容问题&#xff0c;而import只在IE5以上才能识别 3、页面被加载时&#xff0c;link会同时被加载&#xff0c;而import引用的css会等到页面加载完再加载 4、link方式的样式的权重高于impo…

6.java 代码块

代码块 在java中用{}括起来的称为代码块&#xff0c;代码块可分为以下四种: 普通代码块构造代码块静态代码块同步代码块普通代码块 在方法或语句中出现的{}就称为普通代码块。普通代码块和一般语句的执行顺序由他们在代码中出现的次序决定&#xff0c;先出现先执行。 普通代码块…

C#如何测试代码运行时间

第一种方式&#xff1a;System.Diagnostics.Stopwatch stopwatch new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 // 需要测试的代码 .... stopwatch.Stop(); // 停止监视 TimeSpan timespan stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double …

0074 几道面试题

昨天参加了惠装网的面试&#xff0c;有些题不会做的&#xff0c;记录下来 switch语句能否作用在byte、long、String上 Java1.7以前&#xff1a;byte、short、int、char Java1.7开始&#xff1a;新增String 因此switch语句不能作用在long上&#xff0c;看下面代码&#xff1a; p…

SpringBoot入门之内嵌Tomcat配置

spring boot默认web程序启用tomcat内嵌容器tomcat&#xff0c;监听8080端口,servletPath默认为 / 。需要用到的就是端口、上下文路径的修改&#xff0c;在spring boot中其修改方法极其简单&#xff0c;实例如下&#xff1a; server.port8088 server.context-path/test 启动程序…

第二十二章:动画(六)

复合动画您可以混合等待和未等待的调用来创建复合动画。 例如&#xff0c;假设您希望按钮在大小扩展的同时旋转360度然后收缩。ViewExtensions类定义一个方法名称ScaleTo&#xff0c;它为Scale属性设置动画&#xff0c;就像RotateTo为Rotate属性设置动画一样。 Button大小的扩展…

C#操作Excel总结

0. 导入命名空间&#xff1a; 1234using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;using System.IO;using System.Reflection;1. 如何打开已有excel文档&#xff0c;或者创建一个新的excel文档 123Application app new Application();Workbooks wbks app…

Ubuntu16.04用源安装Nginx+PHP5.6+MySQL5.6

安装Nginx 1、首先添加nginx_signing.key(必须&#xff0c;否则出错) $ wget http://nginx.org/keys/nginx_signing.key$ sudo apt-key add nginx_signing.key 2、添加]Nginx](http://nginx.org/)官方提供的源 $ echo "deb http://nginx.org/packages/ubuntu/ trusty ngin…

leetcode -39组合总数

搜就完事了&#xff0c;没想着优化。唉~太菜&#xff0c;给一个位置标记位置&#xff0c;然后通过该位置向该位置及该位置以下寻找&#xff0c;这样不存在什么重复回去查找问题。 如果总结大于目标值&#xff0c;回溯一下&#xff0c;如果不大于继续。 class Solution { public…

避免某个子窗体重复运行的方法(showdialog、show)

在C#中窗口的显示有两种方式&#xff1a;模态显示&#xff08;showdialog&#xff09;和非模态显示&#xff08;show&#xff09;。 二者最常见的区别是&#xff1a;模态显示后&#xff0c;弹出窗口阻止调用窗口的所有消息响应。只有在弹出窗口结束后调用窗口才能继续。在模态窗…