java线程跟多线程
java创建线程两种方式:
1.继承Thread创建线程
/**
* Created by lsf on 16/4/18.
*/
class NewThread extends Thread {
NewThread(){
super(); //创建线程
start(); //启动线程
} public void run() {
long starttime = System.currentTimeMillis();
System.out.println("child thread..."+starttime);
}
} class CurrentThreadDemo {
public static void main(String args[]) {
long starttime2 = System.currentTimeMillis();
System.out.println("main thread,,,"+starttime2); //主线程
new NewThread();
System.out.println("住县城");
}
}
2.实现
import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion; import java.util.Date; /**
* Created by lsf on 16/4/18.
*/
class NewThread extends Thread {
NewThread(){
Thread t = new Thread(this); //创建线程
t.start(); //启动线程
} public void run() {
long starttime = System.currentTimeMillis();
System.out.println("child thread..."+starttime);
}
} class CurrentThreadDemo {
public static void main(String args[]) {
long starttime2 = System.currentTimeMillis();
System.out.println("main thread,,,"+starttime2);
new NewThread();
System.out.println("主线程"); //主线程
}
}
3.给任务创建多个线程去执行
class NewThread extends Thread {
String name;
NewThread(String threadname){
name = threadname;
Thread t = new Thread(this,threadname); //创建线程
t.start(); //启动线程
}
public void run() {
long starttime = System.currentTimeMillis();
System.out.println("child thread..."+name);
}
}
class CurrentThreadDemo {
public static void main(String args[]) {
long starttime2 = System.currentTimeMillis();
System.out.println("main thread,,,"+starttime2);
new NewThread("demo1");
new NewThread("demo2");
new NewThread("demo3");
System.out.println("主线程"); //主线程
}
}
4.线程优先级设置
/**
* Created by lsf on 16/4/22.
*/ class ThreadTest implements Runnable { Thread t;
int count = 0;
private volatile Boolean flag = true; public ThreadTest(int p) {
t = new Thread(this);
t.setPriority(p);
} public void start(){
t.start();
} public void finish(){
flag = false;
} @Override
public void run() {
while(flag){
count++;
}
} } public class ThreadPriority {
public static void main(String[] args) {
ThreadTest t1 = new ThreadTest(Thread.NORM_PRIORITY - 2);
ThreadTest t2 = new ThreadTest(Thread.NORM_PRIORITY + 2);
t1.start();
t2.start();
t1.finish();
t2.finish();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} try {
System.out.println("t1 count:"+t1.count);
System.out.println("t2 count:"+t2.count);
t1.t.join();
t2.t.join();
System.out.println("t1 is alive:" + t1.t.isAlive());
System.out.println("t2 is alive:" + t1.t.isAlive());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
5.线程同步
线程同步的关键在于同一时刻线程在管程内,应用场景一般是:当某个方法(callme)需要用多线程去执行,可以改造一下对应的方法,加上关键词synchronized,这样在调用过程中,每个线程都会默认进入隐式管程。
/**
* Created by root on 16-4-15.
*/ class Callme {
synchronized void call(String msg){
System.out.println("["+msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("]");
}
} class ThreadCaller implements Runnable{ String msg;
Callme target;
Thread t; public ThreadCaller(Callme targ,String s) {
target = targ;
msg = s;
t = new Thread(this);
t.start();
} @Override
public void run() {
target.call(msg);
}
} class Demo {
public static void main(String[] args) {
Callme target = new Callme();
ThreadCaller obj1 = new ThreadCaller(target,"Hello");
ThreadCaller obj2 = new ThreadCaller(target,"Synchronized");
ThreadCaller obj3 = new ThreadCaller(target,"World"); try {
obj1.t.join();
obj2.t.join();
obj3.t.join();
} catch (InterruptedException e) {
System.out.println("Interrupted");
}
}
}
java线程跟多线程的更多相关文章
- Java线程与多线程教程
本文由 ImportNew - liken 翻译自 Journaldev. Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用 ...
- Java线程和多线程(十三)——Callable,Future,FutureTask
在Java多线程之中,Callable和Future的使用时非常广泛的.在之前的文章中,我们了解了关于Java线程池基础的一些内容,知道如何提交Runnable的任务.但是,Runnable的任务是无 ...
- Java线程和多线程(十二)——线程池基础
Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务.开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池. 线程池是Java中多线程的一个重要概 ...
- Java线程和多线程(三)——线程安全和同步
线程安全在Java中是一个很重要的课题.Java提供的多线程环境支持使用Java线程.我们都知道多线程共享一些对象实例的话,可能会在读取和更新共享数据的事后产生数据不一致问题. 线程安全 之所以会产生 ...
- Java线程和多线程(一)——线程的基本概念
Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...
- Java 线程与多线程
Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...
- Java线程和多线程(八)——Thread Dump
Java的Thread Dump就是列出JVM中所有激活状态的线程. Java Thread Dump Java Thread Dump在分析应用性能瓶颈和死锁的时候,是非常有效的. 下面将介绍多种不 ...
- Java 线程和多线程执行过程分析
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java线程和多线程(十五)——线程的活性
当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞.当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕.在本章中,我们来需要仔细分析可能会 ...
随机推荐
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- Struts2基于注解的Action配置
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...
- CSS Hack解决浏览器IE部分属性兼容性问题
1.Css Hack 不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持.解析不一样,导致在不同浏览器的环境中呈现出不 ...
- js 阻止事件冒泡和默认行为 preventDefault、stopPropagation、return false
preventDefault: preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为.既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就 ...
- UIBezierPath-绘制基本图形
步骤1:确定路径 步骤2:渲染 override func draw(_ rect: CGRect) { let path:UIBezierPath // 矩形 // path = UIBezierP ...
- (一)Maven初步了解与认识
Apache Maven是一个软件项目管理的综合工具.基于项目对象模型(POM)的概念,提供了帮助管理构建.文档.报告.依赖.发布等方法,Maven简化和标准化项目建设过程.处理编译,分配,文档,团队 ...
- 打开MySQL数据库远程访问的权限
说明:转自,http://www.cnblogs.com/ycsfwhh/archive/2012/08/07/2626597.html 本人亲测方法1有效,方法2待验证 下载GPL版本安装 M ...
- Oracle创建表空间、创建用户以及授权
Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 为了避免麻烦,可以用’Database Configuration Assistant’向导来创建数 ...
- T-SQL 常用DDL语句
数据库操作 删除数据库 drop database database_name(数据库名) 修改数据库名 alter database database_name(原数据库名) modify name ...
- 机器学习实战笔记(Python实现)-00-readme
近期学习机器学习,找到一本不错的教材<机器学习实战>.特此做这份学习笔记,以供日后翻阅. 机器学习算法分为有监督学习和无监督学习.这本书前两部分介绍的是有监督学习,第三部分介绍的是无监督学 ...