java入门 -- 多线程与线程安全

/*

* 进程:

* 定义:运行中的程序称为进程,进程负责内存空间的分配;

*

* 说明:单核cpu在一致时间翩只能运行一个程序。所有运行的程序实际上是在争夺CPU的使用权,cpu在短时间内快速切换来执行不同的程序;

* 这就是多任务运行实现机制;

*

* 线程:

*  定义:线程负责代码的执行

*  运行任何一个java程序的时候,jvm都会创建一个main线程,并执行main中的代码

* 一个java应用程序至少有2个线程,一个是main线程,负责执行代码,一个是垃圾回收器线程负责回收垃圾

*

*多线程的好处:

* 1. 一个进程同时执行多个任务;

* 2. 提高了资源的利用率;

*

*多线程的弊端

* 1. 增加了cpu的负担;

* 2. 降低了一个进程中线程的执行概率:

* 2. 出现了死锁的问题;

*

*创建多线程

* 方式一:

* 1. 定义一个子类去继承Thread类;

* 2. 重写Thread的run方法:

* 说明:jvm创建的主线程所运行的代码就是main方法中的代码,而自定义的线程所要执行的代码是放在run方法中的,重写的目的是把自定义线程所要运行的代码放入到run方法中.

* 3. 创建THread的子类对象,调用Start()方法开启线程;

* 说明:一旦开启了线程,jvm就会自动执行run方法中的代码,而不能手动调用run方法,否则就会像调用普通方法一样而不会开启新进场;


* 方式二:

** 线程创建方式二:

* 1, 自定义一个类实现Runnable接口;

* 2. 实现Runnable的run方法, 把自定义线程代码放在run方法中;

* 3. 创建Runnable实现类的对象;

* 4. 创建Thread类的对象;将Runnable实现类的对象传递给Thread类的构造函数;

*  5. 调用Thread类对象的start方法;

*

* 注意的问题:

* 1. Runnable的实现类对象并不是线程对象,而是Runnable的实现类而已。只有Thread和Thread的子类对象才是线程duix

* 2. 将Runnable的实现类对象作为参赛传递给Thread的作用是将其run方法中代码传递给Thread对象,底层是Thread中

* 的run方法调用了传递过来的Runnable实现类对象中的run方法.

*线程的生命周期


/*

* 线程类常用方法

* Thread(String anem) 初始化线程的方法

*

* getName() 返回线程的方法

* sleep() 指定线程的睡眠时间,毫秒为单位,sleep是静态方法,那个静态方法执行了该方法,那么就是那个线程睡眠;

* getPriority() 返回当前线程的优先级, 默认线程的优先级是5

* setPriority(int newPriority) 设置线程的优先级,虽然设置了线程的优先级,但是具体取决于底层的操作系统的实现(最大的优先级是10,最小的是1,默认为5);

* currentThread() 返回cpu正在执行的线程数;静态方法,那么线程执行了该方法就返回当前线程对象

*线程安全问题:

* 1. 出现原因: 有多个线程共享数据

* 2. 有多个语句操作共享数据;

* 线程同步机制:

* 方式一: 同步代码块

* 使用格式:

* synchronized(锁对象)

* { 同步代码;...}

* 注意:

* 1. 锁对象可以是任意的对象,只要是对象都可以;

* 原理是任何对象内部都隐式维护了一个状态变量(非静态成员变量),而同步机制就利用这了这个状态来实现锁机制;

* 2. 在同步代码块中调用了sleep()方法,那么在线程休眠的时候不会释放锁;

* 3. 只有真正出现线程安全问题,才使用同步代码块来解决;

* 4. 同步代码块中使用的锁必须是唯一的,不能使用匿名对象;因此要使用静态对象;

* 最简单的方式是使用一个字符串常量,因为字符串存在于字符串常量池中,是共享的.

*

* 方式二:同步函数

* 使用synchronized修饰一个函数

* 格式:

* synchronized 函数名(){}

* 注意:

* 1. 如果synchronized修饰非静态成员函数,那么线程锁是this对象,如果是静态成员函数,那么线程锁是函数所在类的字节码文件;

* 2. 同步函数的锁对象是固定的,不能修饰;

*

* 说明:推荐使用同步代码块

* 1. 同步代码块的锁对象可以随意指定,方便控制,同步函数的锁是固定的,不能指定:

* 2. 同步代码块可以方便需要同步代码的范围,同步函数必须是函数中的整个代码:

*/

public class Demo17 extends Thread {

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

for(int i=0; i<10000; i++)

{

System.out.println("我是自定义线程" + i);

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

//创建自定义线程对象

Demo17 d17 = new Demo17();

d17.start();

for(int i=0; i<10000; i++)

{

System.out.println("我是主线程" + i);

}

}

}

线程创建方式二:

public class Demo5 implements Runnable{

@Override

public void run() {

// TODO Auto-generated method stub

for(int i=0; i<100; i++)

{

System.out.println(Thread.currentThread().getName()+"自定义线程"+i);

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Demo5 d3 = new Demo5();

Thread td = new Thread(d3, "张三儿");

td.start();

for(int i=0; i<100; i++)

{

System.out.println("Main方法的线程"+i );

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,957评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,454评论 1 15
  • 该文章转自:http://blog.csdn.net/evankaka/article/details/44153...
    加来依蓝阅读 7,350评论 3 87
  • 写在前面的话: 这篇博客是我从这里“转载”的,为什么转载两个字加“”呢?因为这绝不是简单的复制粘贴,我花了五六个小...
    SmartSean阅读 4,730评论 12 45
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,621评论 18 399