多线程学习-- part 1 Thread
一.Thread的使用
(1)sleep:进程等一会
(2)join:让并发处理变成串行
(3)start:启动线程的唯一方法,start()首先为线程分配必须的系统资源,调度线程运行并执行线程的run()方法
(4)run:放入的是线程的工作
public class HelloWord {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
System.out.println("我是子线程" + Thread.currentThread().getId());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是主线程" + Thread.currentThread().getId());
}
}
(5)Interrupt 和stop:这两个关键字都是用来强制终止程序的
终止线程的三种方法:
- Interrupt只管一次,相当于continue;
- stop相当于Break,线程直接退出,可能会产生不可预知的后果,不建议使用
- 利用共享变量标志位,在run()里面判断,是run()执行完自然退出
- run()不控制,执行完自己退出
public class HelloWord {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 3; i++) {
try {
Thread.sleep(5000);
System.out.println("我是子线程" + Thread.currentThread().getId());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
t.start();
t.interrupt(); //这里开始Abort
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 3; i++) {
try {
Thread.sleep(5000);
System.out.println("我是子线程" + Thread.currentThread().getId());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}); t1.start();
t1.stop(); System.out.println("我是主线程" + Thread.currentThread().getId());
}
线程的优点比较多,每个线程都需要默认的堆栈空间,所以说线程数受到内存空间大小的限制,如果线程数开得太多反而使得其反,进程被分配的时间片会被线程分得更细,就会导致处理器在不同线程频繁切换。
多线程学习-- part 1 Thread的更多相关文章
- 多线程学习三:Thread API,ThreadLocal,synchronized,volatile和Condition
一.Thread API: setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 首先要了解什么是Thread. ...
- c++11多线程学习笔记之一 thread基础使用
没啥好讲的 c++11 thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...
- 多线程学习-基础(一)Thread和Runnable实现多线程
很久没记录一些技术学习过程了,这周周五的时候偶尔打开“博客园”,忽然让我产生一种重拾记录学习过程的想法,记录下学习研究过程的一点一滴,我相信,慢慢地就进步了!最近想学习一下多线程高并发,但是多线程在实 ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- 【转】C#多线程学习
C#多线程学习(一) 多线程的相关概念 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序 ...
- java多线程学习
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 一.扩展java.lang.Thread类 package com.multithread.lea ...
- Java多线程学习(吐血超详细总结)
本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的 ...
- C#多线程学习(一) 多线程的相关概念(转)
什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄 ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
随机推荐
- SQLServer 简单数据拆分
--1. 旧的解决方法(sql server 2000) create table tb(id int,value varchar(30)) insert into tb values(1,'aa ...
- 885. Spiral Matrix III
On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east. Here, the north ...
- 阶段3 3.SpringMVC·_03.SpringMVC常用注解_7 ModelAttribute注解
这个注解可以作用在方法上,也可以作用在参数上 演示 user里面有三个属性, 表单只提交了两个属性.缺少了date属性 date没有获取到值因为也没提交这个值. 下面返回的user对象.上面就会拿到 ...
- 六十四:CSRF攻击与防御之系统准备之病毒网站转账实现
准备一个页面或图片,用于用户访问 一:表单方式 视图 from flask import Flask, render_template app = Flask(__name__) @app.route ...
- spring boot starter是什么
参考自:https://www.cnblogs.com/EasonJim/p/7615801.html Spring Boot中Starter是什么 比如我们要在Spring Boot中引入Web M ...
- web端测试之封装公共部分
from time import * from selenium import webdriver def login(self,username,passwd): self.dr=webdriver ...
- react中路由跳转push与replace的区别
路由跳转,replace / push 区别 push: a-b-c 可以回到上一级 例: this.props.history.push('路由地址') replace: a-b-c 回不到上一级 ...
- jvm的学习笔记:二、类的初始化,代码实战(3)
首次主动此用导致类的初始化 MyParent4 myParent4 = new MyParent4(); MyParent4 myParent5 = new MyParent4(); 输出: MyPa ...
- ServletContainerInitializer
在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能. 每个框 ...
- java将base64解析图片保存到本地。
将base64解析图片保存到本地的两个方法 /** * base64转图片 * @param base64str base64码 * @param savePath 图片路径 * @return */ ...