Scala�̓������Љ�A��{�\������A�N���X�ȂǁAScala�̊�{�I�ȋ@�\�ɂ��ĉ���������A��
�@�O��̋L���uScala�̒��ی^�ƈÖق̌^�ϊ��^�����A�p�����[�^�����v�ł́A�uimplicit�v�L�[���[�h���g�p�����Öق̌^�ϊ����Öق̃p�����[�^�Ȃǂ��Љ�܂����B
�@�����Scala���W���Ŏ����Ă������s�����p���C�u����������R���N�V�������Љ�܂��B
�@��1��L���ł́AScala�W����REPL��Scala IDE�œ�����m�F���Ă݂܂����B����{�L���̃T���v���R�[�h�́A�ǂ���Ŋm�F���Ă����͂���܂��A�Θb�I�Ɏ��s�ł��A1�����ƂɃR�[�h�̌��ʂ��������ĕ֗��Ȃ̂ŁA��{�I�ɂ�REPL��p���Đ������Ă����܂��B
�@Scala IDE���g�p����ꍇ�A��1��L���́wScala IDE for Eclipse�ŁuHello Scala�I�v�x���Q�Ƃ��ăv���W�F�N�g���쐬���Ď��s���Ă��������BREPL���g�p����ꍇ�́A�R���\�[�����scala�R�}���h�����s���AREPL���N�����Ă��������B
�@�}���`�R�ACPU����ʓI��PC�ł�������O�ɂȂ��Ă�������A�v���O�����̕��s�����Ŗ��ʂ��Ȃ����A�p�t�H�[�}���X�����コ���邱�Ƃ͓��R�̋Z�p�ƂȂ��Ă��܂��B
�@Java�̏ꍇ�A���L�f�[�^�����b�N���g�p�����X���b�h���f���������Ă��܂��BJava�ŕ��s���������s����ɂ�Concurrent API�i�ujava.util.concurrent�v�p�b�P�[�W��API�j���g�p������A�usynchronized�v�L�[���[�h���g�p���ċ��L�f�[�^�ɑ���A�N�Z�X���R���g���[�����ĕ��s�������������܂��B
�@Java�̕��s�����Ɋւ����{�I�ȕ����́A���L�̋L�����Q�l�ɂ��Ă݂Ă��������B
�@�������A���̃��f���̏ꍇ�A�A�v���P�[�V�����̏��������G�����Ă���ƁA�M�����������}���`�X���b�h�̃A�v���P�[�V��������낤�Ƃ����ꍇ�ɓ���Ȃ�܂��B
�@�Ⴆ�A���L�f�[�^�𐧌䂷��͈͂�f�[�^�Ƀ��b�N��������^�C�~���O�A�������f�b�h���b�N�̉����Ȃǂ���������ƍl���Ď�������K�v������܂��B
�@�Ȃ��AJava�ł�5.0������s�������C�u�����Ƃ��āA�ujava.util.concurrent�v����������܂����B����API���g�p����}���`�X���b�h�v���O���~���O�ɂ����āA�ȑO���������N�����ɂ����Ȃ�܂��B
�@�ł�java.util.concurrent API���g�p�����ȒP�ȃT���v�������Ă݂܂��傤�B���L�̃T���v����Java�ŋL�q����Ă��܂��Bmain���\�b�h��Executors�N���X���g�p���AThreadSample��run���\�b�h��ʃX���b�h�Ŏ��s���Ă��܂��B
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadSample implements Runnable { private String name = ""; public ThreadSample(String name) { this.name = name; } /** * ExecutorService#execute�Ŏ��s����郁�\�b�h. */ public void run() { for (int i = 0; i < 3; i++) { try { System.out.println(name + "count=" + i); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { System.out.println("ThreadSample#main start"); // ExecutorService�쐬 ExecutorService ex = Executors.newSingleThreadExecutor(); for (int i = 0; i < 3; i++) { ex.execute(new ThreadSample("[Thread-" + i + "]")); } ex.shutdown(); System.out.println("ThreadSample#main end"); } }
�@��L�v���O���������s����ƁA���̊��ł͉��L�̂悤�ȏ��Ԃŏ��������s����܂����B�ʃX���b�h��1�b���ƂɃJ�E���g�A�b�v���Ă��܂��B
ThreadSumple#main start [Thread-0]count=0 ThreadSumple#main end [Thread-0]count=1 [Thread-0]count=2 [Thread-1]count=0 [Thread-1]count=1 [Thread-1]count=2 [Thread-2]count=0 [Thread-2]count=1 [Thread-2]count=2
�@java.util.concurrent API�ɂ́A�X���b�h�v�[�����O�ƍė��p�̎d�g�݂��X�P�W���[�����O�A�������Ɋւ���@�\������A�}���`�X���b�h�A�v���P�[�V�����̎������ׂ�啝�Ɍy���ł��܂��B�������A���L�f�[�^�ƃ��b�N�̃��f���Ƃ�����{�I�Ȏd�g�݂͕ς���Ă��܂���B
�@�ł́AScala�ŕ��s���������s�������ꍇ�͂ǂ̂悤�ɂ���悢�̂ł��傤���B���������@�͂���̂ŁA���ԂɏЉ�Ă����܂��傤�B
�@1�ڂ́A�ʏ��Java�Ɠ�����Thread�N���X��synchronized���g�����@�ł��BScala����Java�̃N���X�͂��̂܂g����̂ŁAThread�N���X�͂��̂܂g���܂��B
�@�܂��ARunnable�C���^�[�t�F�C�X���g���C�g�Ƃ��Ĉ����Asynchronized�L�[���[�h�́A�uAnyRef�v�N���X�̃��\�b�h�Ƃ��Ē���Ă��܂��B��قǂ�Java�T���v����Thread�ڎg�p����`��Scala�ɏ��������Ă݂܂��傤�i�����̃T���v���A�v����Eclipse�Ŏ��s���Ă��������j�B
object Main { def main(args: Array[String]) = { println("ThreadSample#main start"); for (i <- 0 to 3) { val t = new Thread(new ThreadSample("[Thread-" + i + "]")) t.start() } println("ThreadSample#main end") } } class ThreadSample(name: String) extends Runnable { def run() = { for (i <- 0 to 3) { println(name + "count=" + i) Thread.sleep(1000) } } }
�@�v���O���������s���Ă݂�ƁA���Ȃ����삷�邱�Ƃ�������܂��BScala�ł͗�O���L���b�`����K�v���Ȃ��̂ŗ]�v��try-catch�����Ȃ��A�V���v���ȋL�q���ł��Ă܂��ˁB
�@2�ڂ͐�قǐ�������java.util.concurrent API��Scala����g�����@�ł��B�P����Scala�̍\���ɒu�������邾���œ��삵�܂��i�����̃T���v���A�v����Eclipse�Ŏ��s���Ă��������j�B
import java.util.concurrent.ExecutorService import java.util.concurrent.Executors object Main { def main(args: Array[String]) = { println("ThreadSumple#main start") // ExecutorService�쐬 val ex = Executors.newSingleThreadExecutor() for (i <- 0 to 3) { ex.execute(new ThreadSample("[Thread-" + i + "]")) } ex.shutdown() println("ThreadSumple#main end") } } class ThreadSample(name: String) extends Runnable { def run() = { for (i <- 0 to 3) { println(name + "count=" + i) Thread.sleep(1000) } } }
�@3�ڂ́AScala�̎����s�����@�\���g�����@�ł��BScala�ł́u�A�N�^�[�v�ƌĂ��X���b�h�Ɏ����I�u�W�F�N�g���m�Ń��b�Z�[�W���������A���s�������s���܂��B�����Java�̎����L�f�[�^���b�N���f���Ƃ͈Ⴂ�A�f�[�^�̋��L���Ȃ����b�Z�[�W�������f���ł��B
�@�p�t�H�[�}���X�ɂ����Ă͓K�ɐv���ꂽ���L�f�[�^���b�N���f���ɂ͂��Ȃ��܂��A�A�N�^�[���g�����f�b�h���b�N�⋣����������₷�����Ƃ������b�g�ɂȂ�܂��B���y�[�W����A���ۂɃA�N�^�[���g�p���ăT���v���v���O�������쐬���Ă݂܂��傤�B
Copyright © ITmedia, Inc. All Rights Reserved.